C++学习笔记4
该系列内容来源于: 中国大学MOOC 北京邮电大学 C++程序设计(面向对象进阶)
浅谈C++中的String类
The C++ string Class
C++ 使用 string 类处理字符串
string类中的函数
-
构造
-
追加(
append) -
赋值(
assign) -
位置与清除(
at、clear、erase、empty) -
长度与容量(
size) -
比较(
compare) -
子 串(
substr) -
搜索(
find) -
插入与替换(
insert、replace) -
运算符(
[ ]、=、+等)
建议在 cppreference 网站上仔细阅读这些函数的用法,或者在编程时注意IDE的智能提示。
注意事项
操作string对象中的字符串内容时,有时会用到“index”。
很多string的函数接受两个数字参数: index, n
-
index:从index号位置开始
-
n:之后的n个字符
创建 string 对象
- 用无参构造函数创建一个空字串
- 由一个字符串常量或字符串数组创建
string对象
string a; // 空字符串
string message{ "Aloha World!" };
char charArray[] = {'H', 'e', 'l', 'l', 'o', '\0'};
string message1{ charArray };
追加字符串
一系列append的重载函数可以将新内容附加到一个字符串中。
string s1{ "Welcome" };
s1.append( " to C++" ); // appends " to C++" to s1
cout << s1 << endl; // s1 now becomes Welcome to C++
string s2{ "Welcome" };
s2.append( " to C and C++", 3, 2 ); // appends " C" to s2
cout << s2 << endl; // s2 now becomes Welcome C
string s3{ "Welcome" };
s3.append( " to C and C++", 5); // appends " to C" to s3
cout << s3 << endl; // s3 now becomes Welcome to C
string s4{ "Welcome" };
s4.append( 4, 'G' ); // appends "GGGG" to s4
cout << s4 << endl; // s4 now becomes WelcomeGGGG
为字符串赋值
一系列assign的重载函数可以将一个字符串赋以新内容
string s1{ "Welcome" };
s1.assign( "Dallas" ); // assigns "Dallas" to s1
cout << s1 << endl; // s1 now becomes Dallas
string s2{ "Welcome" };
s2.assign( "Dallas, Texas", 1, 3 ); // assigns "all" to s2
cout << s2 << endl; // s2 now becomes all
string s3{ "Welcome" };
s3.assign( "Dallas, Texas", 6 ); // assigns "Dallas" to s3
cout << s3 << endl; // s3 now becomes Dallas
string s4{ "Welcome" };
s4.assign( 4, 'G' ); // assigns "GGGG" to s4
cout << s4 << endl; // s4 now becomes GGGG
位置与清除
at(index): 返回当前字符串中index位置的字符clear(): 清空字符串erase(index, n): 删除字符串从index开始的n个字符empty(): 检测字符串是否为空
string s1{ "Welcome" };
cout << s1.at(3) << endl; // s1.at(3) returns c
cout << s1.erase(2, 3) << endl; // s1 is now Weme
s1.clear(); // s1 is now empty
cout << s1.empty() << endl; // s1.empty returns 1 (means true)
比较字符串
compare() 函数用于比较两个字符串。它与C语言中的 strcmp() 函数很像。
string s1{ "Welcome" };
string s2{ "Welcomg" };
cout << s1.compare(s2) << endl; // returns -2
cout << s2.compare(s1) << endl; // returns 2
cout << s1.compare("Welcome") << endl; // returns 0
获取子串
at() 函数用于获取一个单独的字符;
substr() 函数则可以获取一个子串
string s1{ "Welcome" };
cout << s1.substr(0, 1) << endl; // returns W; 从0号位置开始的1个字符
cout << s1.substr(3) << endl; // returns come; 从3号位置直到末尾的子串
cout << s1.substr(3, 3) << endl; // returns com;从3号位置开始的3个字符
搜索字符串
find() 函数可以在一个字符串中搜索一个子串或者一个字符
string s1{ "Welcome to C++" };
cout << s1.find("co") << endl; // returns 3; 返回子串出现的第一个位置
cout << s1.find("co", 6) << endl; // returns -1 从6号位置开始查找子串出现的第一个位置
cout << s1.find('o') << endl; // returns 4 返回字符出现的第一个位置
cout << s1.find('o', 6) << endl; // returns 9 从6号位置开始查找字符出现的第一个位置
插入和替换字符串
-
insert():将某个字符/字符串插入到当前字符串的某个位置 -
replace():将本字串从某个位置开始的一些字符替换为其它内容
string s1("Welcome to C++");
s1.insert(11, "Java and ");
cout << s1 << endl; // s1 becomes Welcome to Java and C++
string s2{ "AA" };
s2.insert(1, 4, 'B'); //在1号位置处连续插入4个相同字符
cout << s2 << endl; // s2 becomes to ABBBBA
string s3{ "Welcome to Java" };
s3.replace(11, 4, "C++"); //从11号位置开始向后的4个字符替换掉。注意'\0'
cout << s3 << endl; // returns Welcome to C++
字符串运算符
| Operator | Description |
|---|---|
| [ ] | 用数组下标运算符访问字符串中的字符 |
| = | 将一个字符串的内容复制到另一个字符串 |
| + | 连接两个字符串得到一个新串 |
| += | 将一个字符串追加到另一个字符串末尾 |
| << | 将一个字符串插入一个流 |
| >> | 从一个流提取一个字符串,分界符为空格或者空结束符 |
| ==, !=, <, <=, >, >= | 用于字符串比较 |
string s1 = "ABC"; // The = operator
string s2 = s1; // The = operator
for (int i = s2.size() - 1; i >= 0; i--)
cout << s2[i]; // The [] operator
string s3 = s1 + "DEFG"; // The + operator
cout << s3 << endl; // s3 becomes ABCDEFG
s1 += "ABC";
cout << s1 << endl; // s1 becomes ABCABC
s1 = "ABC";
s2 = "ABE";
cout << (s1 == s2) << endl; // Displays 0
cout << (s1 != s2) << endl; // Displays 1
cout << (s1 > s2) << endl; // Displays 0
cout << (s1 >= s2) << endl; // Displays 0
cout << (s1 < s2) << endl; // Displays 1
cout << (s1 <= s2) << endl; // Displays 1

本文详细介绍了C++标准库中的String类,包括如何创建、追加、赋值、比较字符串等基本操作,以及如何利用内置函数进行字符串的查找、替换、截取等高级操作。
728

被折叠的 条评论
为什么被折叠?



