c++ string
字符串和字符数组
cin.getline()与getline()的区别

cin.getline要使用字符数组做参数,getline要使用字符串做参数
- cin.getline(字符数组,读取的长度);
- getline(cin,字符串名)
1 | char name[20]; |
string 与 stringstream
参考资料:
- string和stringstream用法
- C++ string类的用法整理
string基本用法
赋值
可以用 char* 类型的变量、常量,以及 char 类型的变量、常量对 string 对象进行赋值
1 | string s1; |
拼接
我们一般常用+和+=运算符对 string 对象执行字符串的连接操作。除此之外,也可以使用 append 成员函数进行拼接
1 | string s1("123"), s2("abc"); |
比较
字符串的比较默认是按照字典序来比较的,并且遵从两个规则:1. 逐个比较 2. 不同即停
string 类还有 compare 成员函数,也可用于比较字符串
常用的比较符:<、<=、==、!=、>=、>
ompare 成员函数有以下返回值:
- 小于 0 表示当前的字符串小;
- 等于 0 表示两个字符串相等;
- 大于 0 表示当前的字符串大。
1 | string s1("hello"), s2("hello, world"); |
string常用的成员函数
find()函数
使用方法: s.find(sub),有返回值:无符号整数
示例代码:1
2
3
4
5
6
7
8
9
10//find函数返回类型size_type
string s = "1a2b3c4d5e6f7g8h9i1a2b3c4d5e6f7g8ha9i";
string sub;
string::size_type pos;
pos = s.find(sub);
if(s.find(sub) != string::npos){
...
}
Q1: find函数的返回类型
string::size_type 是一个与实现相关的无符号整数类型,通常与 size_t 相同,用来表示字符串的长度和下标等
它定义为与unsigned型(unsigned int获unsigned long)具有相同含义
与实现相关的意思是它在不同的机器上,长度是可以不同的,并非固定的长度,只要你使用了这个类型,就使得你的程序适合这个机器Q2: != string::npos
npos表示size_type的最大值,用来表示不存在的位置Q3: find函数的返回值
如果找到了子串,则find函数的返回值是这个字串在字符串中第一次出现的位置。如果没有找到,那么会返回一个特别的标记string::npos
size() 函数
length 成员函数返回字符串的长度。size 成员函数可以实现同样的功能。
一般用size()多一些1
2
3string s1 = "12345";
int len = s1.size(); // 5
int len = s1.length(); // 5
substr() 函数
substr 成员函数可以用于求子串 (n, m),调用时,如果省略 m 或 m 超过了字符串的长度,则求出来的子串就是从下标 n 开始一直到字符串结束的部分。例如:
1 | string s1 = "hiyoung blog"; |
replace() 函数
replace 成员函数可以对 string 对象中的子串进行替换,返回值为对象自身的引用。例如:
1 | string s1("Real Steel"); |
erase() 函数
erase 成员函数可以删除 string 对象中的子串,返回值为对象自身的引用
s.erase(起始位置,长度);1
2
3string s1("Real Steel");
s1.erase(1, 3); //删除子串(1, 3),此后 s1 = "R Steel"
s1.erase(5); //删除下标5及其后面的所有字符,此后 s1 = "R Ste"
insert() 函数
insert 成员函数可以在 string 对象中插入另一个字符串,返回值为对象自身的引用
1 | string s1("Limitless"), s2("00"); |