【C++进阶篇】——string类的使用-6. string类对象的修改操作

在这里插入图片描述

  1. operator+=:这个操作符允许你将另一个字符串或者单个字符追加到当前字符串的末尾。比如,如果有一个字符串 str,使用 str += "app"; 会将 "app" 追加到 str 的末尾。
  // string::operator+=
   #include <iostream>
   #include <string>
   int main ()
   {
     std::string name ("John");
     std::string family ("Smith");
     name += " K. ";         // c-string
     name += family;         // string
     name += '\n';           // character
   
     std::cout << name;
     return 0;
   }//John K. Smith
   
  1. append:这个方法用于将另一个字符串或者字符串的一部分追加到当前字符串的末尾。你可以指定要追加的字符串,以及可选的起始位置和长度

    在这里插入图片描述

  // appending to string
   #include <iostream>
   #include <string>
   
   int main ()
   {
     std::string str;
     std::string str2="Writing ";
     std::string str3="print 10 and then 5 more";
   
     // used in the same order as described above:
     str.append(str2);                       // "Writing "
     str.append(str3,6,3);                   // "10 "
     str.append("dots are cool",5);          // "dots "
     str.append("here: ");                   // "here: "
     str.append(10u,'.');                    // ".........."
     str.append(str3.begin()+8,str3.end());  // " and then 5 more"
     str.append(5,0x2E);                // "....."
   
     std::cout << str << '\n';
     return 0;
   }//Writing 10 dots here: .......... and then 5 more.....
  • str.append(str2);str2 的内容 "Writing " 追加到 str 的末尾。
  • str.append(str3,6,3);str3 的第6个字符(“print” 的 ‘p’)开始,追加3个字符("10 ")到 str 的末尾。
  • str.append("dots are cool",5); 追加字符串 "dots "(“dots are cool” 的前5个字符)到 str 的末尾。
  • str.append("here: "); 追加字符串 "here: " 到 str 的末尾。
  • str.append(10u,'.'); 追加10个点字符(‘.’)到 str 的末尾。(这里的 u 表示 “unsigned”,即无符号的.u 后缀并不是必需的)
  • str.append(str3.begin()+8,str3.end());str3 的第8个字符(“and then” 的 ‘a’)开始,追加到 str3 的末尾,即 " and then 5 more"。
  • str.append(5,0x2E); 追加5个字符,字符的ASCII码为0x2E(即点字符 ‘.’)。
  1. push_back:这个方法用于在字符串的末尾追加一个字符。这相当于在字符串的末尾“推入”一个字符。
 // string::push_back
   #include <iostream>
   #include <fstream>
   #include <string>
   
   int main ()
   {
     std::string myString = "Hello";
   
       // 使用 push_back 在字符串末尾追加字符
       myString.push_back(' '); // 追加一个空格
       myString.push_back('W'); // 追加字符 'W'
       myString.push_back('o'); // 追加字符 'o'
       myString.push_back('r'); // 追加字符 'r'
       myString.push_back('l'); // 追加字符 'l'
       myString.push_back('d'); // 追加字符 'd'
   
       // 输出追加后的字符串
       std::cout << myString << std::endl; // 输出 "Hello World"
   
     return 0;
   }
  1. assign:这个方法用于将新的内容赋值给字符串,这会替换掉字符串当前的内容。你可以指定一个新的字符串或者字符串的一部分来赋值。

    在这里插入图片描述

 // string::assign
   #include <iostream>
   #include <string>
   
   int main ()
   {
     std::string str;
     std::string base="The quick brown fox jumps over a lazy dog.";
   
     // used in the same order as described above:
   
     str.assign(base);
     std::cout << str << '\n';
   
     str.assign(base,10,9);
     std::cout << str << '\n';         // "brown fox"
   
     str.assign("pangrams are cool",7);
     std::cout << str << '\n';         // "pangram"
   
     str.assign("c-string");
     std::cout << str << '\n';         // "c-string"
   
     str.assign(10,'*');
     std::cout << str << '\n';         // "**********"
   
     str.assign(10,0x2D);
     std::cout << str << '\n';         // "----------"
   
     str.assign(base.begin()+16,base.end()-12);
     std::cout << str << '\n';         // "fox jumps over"
   
     return 0;
   }
  • str.assign(base);base 的全部内容赋值给 str

  • str.assign(base,10,9);base 的第10个字符开始,赋值9个字符给 str,即 “brown fox”。

    当你指定起始位置和字符数量时,赋值操作是从起始位置索引之后的字符开始的,直到指定的字符数量结束。

  • str.assign("pangrams are cool",7); 将字符串 “pangrams are cool” 的前7个字符赋值给 str,即 “pangram”。

  • str.assign("c-string"); 将字符串 “c-string” 赋值给 str

  • str.assign(10,'*'); 赋值10个星号(‘*’)给 str

  • str.assign(10,0x2D); 赋值10个字符,字符的ASCII码为0x2D(即破折号 ‘-’)给 str

  • str.assign(base.begin()+16,base.end()-12);base 的第16个字符开始,到结束前12个字符结束,赋值给 str,即 “fox jumps over”。

  1. insert:这个方法用于在字符串的指定位置插入一个新的字符串或者字符。你可以指定插入的位置,以及要插入的字符串或字符。

    在这里插入图片描述

  // inserting into a string
   #include <iostream>
   #include <string>
   
   int main ()
   {
     std::string str="to be question";
     std::string str2="the ";
     std::string str3="or not to be";
     std::string::iterator it;
   
     // used in the same order as described above:
     str.insert(6,str2);                 // to be (the )question
     str.insert(6,str3,3,4);             // to be (not )the question
     str.insert(10,"that is cool",8);    // to be not (that is )the question
     str.insert(10,"to be ");            // to be not (to be )that is the question
     str.insert(15,1,':');               // to be not to be(:) that is the question
     it = str.insert(str.begin()+5,','); // to be(,) not to be: that is the question
     str.insert (str.end(),3,'.');       // to be, not to be: that is the question(...)
     str.insert (it+2,str3.begin(),str3.begin()+3); // (or )
   
     std::cout << str << '\n';
     return 0;
   }
  • str.insert(6, str2);str 的第 7 个位置(索引 6)插入 str2 的内容 "the ",结果是 “to be the question”。
  • str.insert(6, str3, 3, 4);str3 的第 4 个字符("not ")开始,插入 4 个字符到 str 的第 7 个位置,结果是 “to be not the question”。
  • str.insert(10, "that is cool", 8); 插入字符串 "that is "(“that is cool” 的前 8 个字符)到 str 的第 11 个位置,结果是 “to be not that is the question”。
  • str.insert(10, "to be "); 插入字符串 "to be " 到 str 的第 11 个位置,结果是 “to be not to be that is the question”。
  • str.insert(15, 1, ':');str 的第 16 个位置插入 1 个冒号字符 ‘:’,结果是 “to be not to be: that is the question”。
  • it = str.insert(str.begin()+5, ',');str 的第 6 个位置插入一个逗号 ‘,’,并将迭代器 it 设置为插入位置的下一个位置,结果是 “to be, not to be: that is the question”。
  • str.insert(str.end(), 3, '.');str 的末尾插入 3 个点字符 ‘.’,结果是 “to be, not to be: that is the question…”。
  • str.insert(it+2, str3.begin(), str3.begin()+3); 在迭代器 it+2 指向的位置(即 ‘e’ 后面)插入 str3 的前 3 个字符 "or ",结果是 “to be, not to be: that is the question…(or )”。
  1. erase:这个方法用于删除字符串中的一部分。你可以指定要删除的起始位置和长度,或者只删除一个字符
 // string::erase
   #include <iostream>
   #include <string>
   
   int main ()
   {
     std::string str ("This is an example sentence.");
     std::cout << str << '\n';
                                              // "This is an example sentence."
     str.erase (10,8);                        //            ^^^^^^^^
     std::cout << str << '\n';
                                              // "This is an sentence."
     str.erase (str.begin()+9);               //           ^
     std::cout << str << '\n';
                                              // "This is a sentence."
     str.erase (str.begin()+5, str.end()-9);  //       ^^^^^
     std::cout << str << '\n';
                                              // "This sentence."
     return 0;
   }
  1. replace:这个方法用于替换字符串中的一部分。你可以指定要替换的起始位置、长度,以及新的字符串来替换旧的部分。
  // 在字符串中替换
   #include <iostream>
   #include <string>
   
   int main ()
   {
     std::string base="this is a test string.";
     std::string str2="n example";
     std::string str3="sample phrase";
     std::string str4="useful.";
   
     // replace signatures used in the same order as described above:
   
     std::string str=base;           // "this is a test string."
     str.replace(9,5,str2);          // "this is an example string." (1)
     str.replace(19,6,str3,7,6);     // "this is an example phrase." (2)
     str.replace(8,10,"just a");     // "this is just a phrase."     (3)
     str.replace(8,6,"a shorty",7);  // "this is a short phrase."    (4)
     str.replace(22,1,3,'!');        // "this is a short phrase!!!"  (5)
   
     str.replace(str.begin(),str.end()-3,str3);                    // "sample phrase!!!"      (1)
     str.replace(str.begin(),str.begin()+6,"replace");             // "replace phrase!!!"     (3)
     str.replace(str.begin()+8,str.begin()+14,"is coolness",7);    // "replace is cool!!!"    (4)
     str.replace(str.begin()+12,str.end()-4,4,'o');                // "replace is cooool!!!"  (5)
     str.replace(str.begin()+11,str.end(),str4.begin(),str4.end());// "replace is useful."    (6)
     std::cout << str << '\n';
     return 0;
   }
  1. swap:这个方法用于交换两个字符串的内容。你可以传递另一个字符串对象,两个字符串的内容会互相交换。
  // swap strings
   #include <iostream>
   #include <string>
   int main ()
   {
     std::string buyer ("money");
     std::string seller ("goods");
       
     seller.swap (buyer);
   
     std::cout << " After the swap, buyer has " << buyer;
     std::cout << " and seller has " << seller << '\n';
     return 0;
   }
  1. pop_back:这个方法用于删除字符串的最后一个字符。这相当于从字符串的末尾“弹出”一个字符。
  // string::pop_back
   #include <iostream>
   #include <string>
   int main ()
   {
     std::string str ("hello world!");
     str.pop_back();
     std::cout << str << '\n';
     return 0;
   }
上一篇:Suffix Tree (后缀树)、Suffix Array (后缀数组)、LZW树详细解读


下一篇:c++入门基础(三)