1、读入未知数目的string对象,并显示
string word;
while(cin>> word)
cout<<word<<endl;
从标准输入读取string,并存入word中。读取并忽略开头的空白字符,读取直至再次遇到空白字符为止。
例如:输入 hello world ; word值为hello
2、用getline读取整行文本
while(getline(cin,word))
cout<<word<<endl;
getline不忽略开头和结尾的空白字符,它只是遇到换行符停止读入并返回。换-行符不存储在string对象中。
3、string的初始化方法
string s("hello world");
string ss(6,'y');
string sss(s);
4、string对象的操作
string s("hello world");
cout<<s.size()<<endl;//11 返回s中字符串的个数
cout<<s.empty()<<endl;//0 如果s为空串返回true,否则false
cout<<s[0]<<endl;//h 返回s中位置为n的字符,从0开始计数
string ss("***");
cout<<s+ss<<endl;//hello world*** 连接两个字符串
s = ss; //*** 将s内容替换为ss的副本
cout<<s<<endl;
cout<<(ss==s)<<endl; //判断两个字符串的内容是否相等
字符串的赋值有时会有效率上的影响。如:
string str1;
str2 = "hello"
str1 = str2;
它必须先释放掉是str1占用的相关内存,然后分配给str1足够存放str2副本的内存空间,最后把str2中的所有字符复制到新分配的内存空间。
5、string对象和字符串字面值的连接
当进行string对象和字符串字面值混合连接时,+操作符的左右操作数至少有一个是string类型的。
string s1 = "hello world";
string s2 = "**"+"##"+s1; //错误
string s2 = "**"+s1; //正确
string s2 = "**"+s1+"##"; //正确
6、输出字符串的每个字符
string s1 = "hello world";
for(string::size_type i=0;i<=(s1.size()-1);i++){
cout<<s1[i]<<endl;
}
7、string对象的下标操作可作为左值
string s1 = "hello world";
s1[0]='*';
cout<<s1<<endl; //"*ello world"
string s1 = "hello world";
for(string::size_type i = 0; i<s1.size(); i++)
{
s1[i]='*';
}
去掉输入字符的标点符号
string s1;
while(getline(cin,s1)){
for(string::size_type i=0;i<s1.size();i++){
if(ispunct(s1[i])){//如果存在标点符号
s1[i] = ' ';
}
}
cout<<s1<<endl;
}