比起C语言用字符数组处理字符串,C++规定了std::String类,操作更加简洁。
下面我将介绍string类型有关的常用函数:
(以下所有测试程序默认已经书写过using namespace std;)
①有关输入的cin>>s和getline(cin,s):
(1)cin>>s如同scanf("%s",s),其特点是只能读取连续的字符串,一旦读入空格就判断为串尾。
(2)getline(xin,s)如同gets(s),其特点是可以读取含空格的字符串,读到回车则结束。
【测试程序片段】:
string str1,str2;
cout<<"write in str1:";
cin>>str1;
cout<<str1<<endl;
cout<<"write in str2:";
getline(cin,str2);
cout<<str2<<endl;
②有关string类型字符串的初始化:
<注>这里的x表示某个字符。
(1)string s(“xxx”):最基本,直接给定s的内容
(2)string s(n,‘x’):定义的s由n个字符x组成
(3)string s(str,n):定义的s是从字符串str第n位开始直到结束的部分。
(比如str=“ILOVEU”,s(str,3)的结果是s=“VEU”)
(4)string s(&str[a],&str[b]):定义的s是字符串str从str[a]到str[b]部分。
(5)string s(str,a,b):效果同(4)。
【测试程序片段】
string stra(20,'&');
cout<<stra<<endl;
string strb("LWCBAKA_DAIHENTAI");
string s(strb,4);
cout<<s<<endl;
string strc(&strb[1],&strb[5]);
cout<<strc<<endl;
string strd(strb,1,4);
cout<<strd<<endl;
③重载后的+,+=,=:
(1)str1+str2:表示将str2连接到str1的末位。
(比如str1=“LOVE”,str2=“U”,那么str1+str2=“LOVEU”)
(2)str+=s:即str=str+s,在str的末位衔接字符串s。
(3)str1=str2:表示将str2的字符串复制给str1。这就如同C语言<string.h>中的函数strcpy(str1,str2)。但有所不同的是,str1=str2是完全覆盖。
【测试程序片段】:
string a("I");
string b("LOVE");
string c=a+b;
a+=a;
cout<<c<<" "<<a<<endl;
a=b;
cout<<a<<endl;
④重载后的逻辑运算符:
重载后的逻辑运算符可以直接比较两个字符串的“大小”(指机器排列序列的位置先后)。就如同<string.h>中的strcmp(str1,str2)函数一样。分别有:str1>str2,str1<str2,str1>=str2,str1<=str2,str1==str2。
【测试程序片段】:
string x,y;
getline(cin,x); getline(cin,y);
if (x>y) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
⑤其他:
(1)字符串长度计算:s.length()或s.size()返回的值是字符串s的串长。
(2)查询子串:即查找字符串中有没有特定的片段。函数有很多种,常用的是s.find(str,n),从s的第n位开始查找是否有str的子片段,如果查找到就返回首个重复的字符的下标,如果查找失败返回string::npos。
【测试程序片段】:
cout<<x.length()<<endl;
cout<<x.size()<<endl;
cout<<"You want to find:";
getline(cin,z);
cout<<x.find(z,0)<<endl;