🔥个人主页: Forcible Bug Maker
🔥专栏: STL || C++
目录
- 前言
- 🔥修改器(Modifiers)
- ==**operator+=**==
- ==append==
- ==push_back和pop_back==
- ==assign==
- ==insert==
- ==erase==
- ==replace==
- ==swap==
- 🔥非成员函数重载(Non-member function overloads)
- ==operator+==
- ==relation operators(string)==
- ==swap(string)==
- ==流插入和流提取重载==
- ==getline==
- 结语
前言
本篇博客主要内容:STL库中string的修改器(Modifiers)和非成员函数重载(Non-member function overloads)。
来到string类的使用第三篇,继续我们的内容,本篇博客将介绍如何使用STL库中string的成员函数修改串,以及重载给string的几个非成员函数。
🔥修改器(Modifiers)
顾名思义,就是一批能改动string串中内容的成员函数。
operator+=
这是一个成员函数的运算符重载。
简单说就是在串的末尾追加字符或字符串。
(1) string string对象
string& operator+= (const string& str);
(2) c-string 字符串指针
string& operator+= (const char* s);
(3) character 字符
string& operator+= (char c);
以上三个重载的功能用一句话概括:在当前string串的末尾追加字符或字符串。
共同的返回值:当前对象的引用(string&)。
使用样例:
// string::operator+= #include #include using namespace std; int main() { string name("John"); string family("Smith"); name += " K. "; // c-string name += family; // string name += '\n'; // character cout string str; string str2 = "Writing "; 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(10, '.'); // ".........." str.append(str3.begin() + 8, str3.end()); // " and then 5 more" cout string str("Hello World"); str.push_back('!'); cout string str; string base = "The quick brown fox jumps over a lazy dog."; // used in the same order as described above: str.assign(base); cout string str = "to be question"; string str2 = "the "; string str3 = "or not to be"; 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 ) cout std::string str("This is an example sentence."); cout string base = "this is a test string."; string str2 = "n example"; string str3 = "sample phrase"; string str4 = "useful."; // replace signatures used in the same order as described above: // Using positions: 0123456789*123456789*12345 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) // Using iterators:0123456789*123456789* 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) cout string str1("hello"); string str2("world"); cout string firstlevel("com"); string secondlevel("cplusplus"); string scheme("http://"); string hostname; string url; hostname = "www." + secondlevel + '.' + firstlevel; url = scheme + hostname; cout string foo = "alpha"; string bar = "beta"; if (foo == bar) cout string str1("hello"); string str2("world"); cout string str; cin str; cout string name; cout