初始化string对象
string s1 //默认初始化,s1是一个空串
string s2(s1) //拷贝初始化,等价于s2=s1
string s3("value") //直接初始化
string s4="value" //拷贝初始化
string s4(n,'c') //直接初始化,把s4初始化为n个字符c组成的串
读写string对象
在执行读取操作时,string对象会自动忽略开头的空白,从第一个字符读起,直到遇到下一个空白为止:
int main()
{
string s;
cin>>s;
cout<<s<<endl;
return 0;
}
如果输入“ hello word”
则会输出“hello”
如果想要保留字符串中间的空白符,则要使用getline函数,getline只要一遇到换行符就结束,哪怕一开始输入的就是换行符也是如此:
int main()
{
string s;
getline(cin,s);
cout<<s<<endl;
return 0;
}
如果输入“ hello word”
则会输出“ hello word”
比较string对象
可以用相等性运算符=和!=比较两个string对象是否相等,如果想等,则意味着他们的长度和所包含的字符全部相等;还可以用关系运算符<、>、<=、>=比较两个string对象的大小:
string s1="hello";
string s2="hello word";
string s3="mn";
易知s1 < s2,s2 < s3
两个string对象相加
两个string对象相加得到一个新的tring对象,它的内容是将两个string对象连接起来:
string s1="hello ", s2="world";
string s3=s1+s2; //s3的内容是hello world
string对象还可以和字面值直接相加,但必须保证每个加法运算符的两侧至少有一个是string:
string s1="hello",s2="world";
string s3=s1+","+s2; //s3的内容是hello,world
string s4="hello"+","; //错误,不能把字面值相加
string s5=s1+","+"world"; //正确,s1+","是一个string对象,这个string对象再与"world"相加
处理string对象中的字符
1、使用范围for语句处理每个字符
string s="Hello World";
decltype(s.size()) cnt=0;
for(auto c:s) //对于s中的每个字符
if(isupper(c)) //如果是大写字母
++cnt;
cout<<s<<"中有"<<cnt<<"个大写字母"<<endl;
输出结果是:
Hello World中有2个大写字母
2、使用范围for语句改变字符串中的字符
string s="hello world";
for(auto &c:s) //注意c是引用
c=toupper(c); //c是一个引用,因此赋值语句改变s中的字符的值
cout<<s<<endl;
输出结果是;
HELLO WORLD
3、使用下标处理一部分字符
下标运算符[]接收的输入参数是string::size_type类型的值,这个参数表示要访问字符的位置;下标从0开始计起最后s[0]是第一个字符,s[s.size()-1]是最后一个字符:
if(!s.empty()) //确保有字符输出
cout<<s[0]<<endl; //输出第一个字符