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