啊,哈喽,小伙伴们大家好。我是#Y清墨,今天呐,我要介绍的是字符与字符串。
导语
前两期,我们已经懂得了概念,今天来看些函数。
正题
一.增加或连接 +=
(1) 后面增加(+=)
string s1,s2; //定义 s1,s2 串s1=”abcd”; //s2 后面增加 s1s2 += s1;cout<<s2<<endl;// 输出1s1 += s2;cout<<s1<<endl;// 输出2
输出1:abcd
输出2: abcdabcd
(2) 连接(+)
string s1,s2; //定义 s1,s2 串s1="abcd"; //赋值s2="xyz"; //赋值s1=s2+"1234"; //连接后给 s1cout<<s1<<endl;// 输出3cout<<s1+"*"+s2;// 输出4
输出3:xyz1234
输出4: xyz1234*xyz
(3) 常见错误
s1 = "abcd"+"xyz";
错误信息 :
[Error] invalid operands of types…… 'operator+'
错误原因:
"常量字符串" 之间不可以相加,"+" 号,两边至少要有一个 string 类型的变量。
二.查找子串 find
(1) find
//在 s1 中找 s2 的出现的第一个位置为3(下标从0开始)
//没有找到子串, 则结果为-1string s1="abcdabcd";string s2="da";string s3=”abx”;cout<< s1.find(s2)<<endl; //输出5if( s1.find(s3)==-1) //输出6cout<<"not find s3"<<endl;else cout<<"find s3"<<endl;
输出5:3
输出6: not find s3
(2) 扩展
//从 s1 的第 2 个位置开始向后找"ab",输出找到的位置
string s1="abcdabcd";cout<<s1.find("ab",2)<<endl; //输出7
输出7: 4
三.取子串(substr)
(1) substr
string s1="abcdabcd"; //赋值cout<<s1.substr(2)<<endl; //从位置 2 开始,一直截取到最后, 返回的是 cdabcdcout<<s1.substr(2,3)<<endl; //从位置 2 开始,截取长度是 3 的子串,返回的是 cdacout<<s1.substr(3,4)<<endl; //从位置 3 开始,截取长度是 4 的子串, 返回的是 dabccout<<s1.substr(3,20); //从位置3开始,截取长度是 20 的子串,由于超过 s1 的 长度,只取剩下的,所以返回 dabcd
substr(位置,长度); 第二个参数可有可无,当没有第二个参数的时候,就从开始位置到结束全部取
(2)常见错误
string s1="abcdabcd";
int i=30;
cout<<s1.substr(i)<<endl; //当第一个位置参数超出"字符串长度-1"时, 会出错!cout<<s1.substr(i,2)<<endl; //i太大,同样会出错!
四. 比较(>,<...)
-
string 类的比较大小非常简单:直接用 > , < , >= , <= , != , == 关系运算就可以了。如: if ("abc">s1) ... .
-
如果是char数组,则需要使用 strcmp(s1,s2)函数,其中 s1 和 s2 是字符 char 数组的名字。比较字符串1和字符串2的大小,比较的结果由函数带回;
- 如果字符串1>字符串2,返回一个正整数;
- 如果字符串1=字符串2,返回0;
- 如果字符串1<字符串2,返回一个负整数;