因为之前在准备机考,数据结构算法题都是拿C++来刷。以前学C++的时候还没怎么深入了解过string类和其他C++ STL中的一些常见用法,上手之后发现真香,尤其在刷题的时候能省下不少麻烦事。现在从标准文档里来搬运一下string类的用法。
来源:http://www.cplusplus.com/reference/
// string constructor #include <iostream> #include <string> int main () { std::string s0 ("Initial string"); // constructors used in the same order as described above: std::string s1; std::string s2 (s0); std::string s3 (s0, 8, 3); std::string s4 ("A character sequence"); std::string s5 ("Another character sequence", 12); std::string s6a (10, 'x'); std::string s6b (10, 42); // 42 is the ASCII code for '*' std::string s7 (s0.begin(), s0.begin()+7); std::cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3; std::cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6a: " << s6a; std::cout << "\ns6b: " << s6b << "\ns7: " << s7 << '\n'; return 0; } output: s1: s2: Initial string s3: str s4: A character sequence s5: Another char s6a: xxxxxxxxxx s6b: ********** s7: Initial
begin(), end()
rbegin(), rend() // 正好与begin(), end() 顺序相反,也就是反着迭代
size() 和 length() 都可计算string的长度
max_size() string可以达到的最大容量
capacity() 内存为字符串分配的空间
// comparing size, length, capacity and max_size #include <iostream> #include <string> int main () { std::string str ("Test string"); std::cout << "size: " << str.size() << "\n"; std::cout << "length: " << str.length() << "\n"; std::cout << "capacity: " << str.capacity() << "\n"; std::cout << "max_size: " << str.max_size() << "\n"; return 0; } output: size: 11 length: 11 capacity: 15 max_size: 429496729
resize() 可以改变字符串的长度,多出的部分可以填充(挺实用的)
// resizing string #include <iostream> #include <string> int main () { std::string str ("I like to code in C"); std::cout << str << '\n'; unsigned sz = str.size(); str.resize (sz+2,'+'); std::cout << str << '\n'; str.resize (14); std::cout << str << '\n'; return 0; } output: I like to code in C I like to code in C++ I like to code
clear() 清空字符串,相似的用法有erase(),可以清空特定位置的字符
empty() 字符串是否为空
// 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; }
str[i]
str.at(i)
str.front() 第一个字符
str.back() 最后一个字符
+= 操作
append()
push_back()
pop_back()
assign() 赋值
insert() 插入
swap() 交换 // str1.swap(str2) , str1与str2的内容被调换
replace() 替换
// 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<int>(10,0x2D); std::cout << str << '\n'; // "----------" str.assign(base.begin()+16,base.end()-12); std::cout << str << '\n'; // "fox jumps over" return 0; }
// 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; }
// replacing in a string #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: // Using positions: 0123456789*123456789*12345 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) // 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) std::cout << str << '\n'; return 0; }
find() 寻找特定字符/字符串,返回下标,若没找到,返回 string::npos
rfind() 返回特定字符/字符串 在目标字符串中最后出现的位置
find_first_of() 寻找特定字符
find_last_of()
substr() 获取子串(切片)
compare() str1.compare(str2) 返回值>0,<0,=0
getline(cin,str) 获取一行字符串