初始化string对象的方式
string si 默认初始化,si是一个空串
string s2 (si) s2是si的副本
string s2 = si 等价于s2 (si) , s2是si的副本
string s3 ("value") s3是字而值"value"的副木,除了字面值M/Ti的那个空宁符外
string s3 = "value" 等价于s3 ("value”),S3是字面值”value”的副本
string s4(n, ' c ') 把s4初始化为II』连续n个字符c纽成的串
string对象上的操作
一个类除了要规定初始化其对象的方式外,还要定义对象上所能执行的操作。其中,类既能定义通过函数名调用的操作,也能定义<<、+等各种运算符在该类象上的新含义。表中列举了 string 的大多数操作。
使用getline读取一整行
有吋我们希望能终得到的字符串中保留输入时的空内符,这时应该用getline 函数代替原來的>>运算符。getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为\n (注意换行符也被读进来了),然后把所读的内容存入到那个string对象中去(注意不存换行符)。getline只耍一遇到换行符就结束读取操作并返冋结果,哪怕输入的一开始就是换行符也是如此。如果输入真的一开始就是换行符,那么所得的结果是个空string。
和输入运算符>>一样,getline也会返冋它的流参数。因此既然输入运算符能作为判断的条件,我们也能用getline的结果作为条件。例如,可以通过改写之前的程序让它一次输出一整行,而不再是每行输出一个词了:
int main()
{
string line;
//每次读入一整行,直至到达文件末尾
while (getline(cin, line))
cout << line << endl;
return 0;
)
处理string对象中的字符
我们经常需要单独处理string对象中的字符,比如检查一个string对象是否包含空白,或者把string对象中的字母改成小写,再或者查看某个特定的字符是否出现等。
这类处理的一个关键问题是如何获取字符本身。有时需要处理string对象中的每一个字符,另外一些时候则只需处理某个特定的字符,还有些时候遇到某个条件处理就要停下來。以往的经验告诉我们,处理这些情况常常要涉及语言和库的很多方面。
另一个关键是要知道能改变某个字符的特性。在cctype头文件中定义了一组标 准庳函数处理这部分工作,表列出了主要的函数名及其含义。
下面是一个例子
#include<iostream>
using std::cin;
using std::cout;
using std::string;
int main(void)
{
string str;
cout<<"input string:\n";
cin>>str;
//把str中的字母转换称x
for(char &c:str)//auto &c:str
{
c='x';
}
cout<<str<<"\n";
cout<<"input string:\n";
getline(cin,str);
string str1;
getline(cin,str); //输入一行字符串
//计算str1中的标点符号
for(decltype(str.size())index=0;index!=str.size();index++)
{
if(!ispunct(str[index]))
str1+=str[index];
}
cout<<str1<<"\n";
return 0;
}
输出结果: