1、可以使用IO操作符读写string对象。
1.1、读写单个string对象:
string i;
cin>>i;//string对象会自动忽略开头的空白并从第一个真正的字符开始读起,直到遇见下一处空白为止
cout<<i;
<键盘输入:" hello world! ">
<打印:"hello">
1.2、读写多个string对象:
string s1,s2;
cin>>s1>>s2;//第一个输入到s1中,第二个输入到s2中
cout<<s1<<s2<<endl;//输出两个string对象
<键盘输入:" hello world! ">
<打印:"helloworld">
1.3、读写未知数量string对象:
string word;
while(cin>>word)//反复读取,直到文件末尾
cout<<word<<endl;//逐个输入
当使用一个istream对象作为条件时,其效果是检测流的状态。若流是有效的,即流未遇到错误,那么检测成功。当遇到文件结束符,或遇到一个无效输入时,istream会变为无效。处于无效状态的istream对象会使条件变假。
Windows | Ctrl+z\Enter/Return |
---|---|
UNIX | Ctrl+d |
Mac OS X | Ctrl+d |
2、使用getline读取一整行:
2.1、该函数会保留输入流中的空白符。函数从给定的输入流中读取数据,直到遇到换行符为止(换行符也被读进来了),然后把读到的内容存入到指定的string对象中去(注意不存换行符)。如果输入一开始就是换行符,则结果将是一个空string。
string line;
getline(cin,line);
2.2、getline会返回它的流参数,故如同读写未知数量的string对象一样,这里的getline函数的结果同样可以作为条件。
3、empty成员函数根据string对象是否为空返回一个对应的布尔值。
string line;
if(!line.empty()){}
4、size成员函数返回string对象的长度(即string对象中字符的个数)。其返回类型是一个string::size_type类型的值,是一个无符号整型数。注意当一个算数表达式中既有无符号数又有int值时,那个int值会自动转换成无符号数。
int n=-5;
string line;
line.size()<n//此结果几乎必然为true,因为负值n会自动转换成一个比较大的无符号值
因此这里需要特别强调:当使用size成员函数返回的值去参与算数运算等操作时,必须保证其它值均为无符号类型,否则会出现意想不到的错误结果。
5、可以直接为string对象赋值:
string s;
s="hello";
6、比较string对象:string类定义了几种用于比较字符串的运算符。这些比较运算符逐一比较对象中的字符,且对大小写敏感。标准库允许把字符字面值和字符串字面值转换成string对象,所以在需要string对象的地方就可以使用这两种字面值来替代,但是需要注意的是当把string对象和字符或字符串字面值混在一条语句中使用时,必须确保运算符的两侧的运算对象至少有一个是string。
== | != | < | > | <= | >= |
7、两个string对象相加(这里尤其需要注意上面所说的字符串字面值的转换)
string s1{"hello"},s2{"world"};
string s3=s1+" "+s2;
8、为了与C兼容,所以C++中的字符串字面值并不是标准库类型string的对象。