1、读取string对象
#include<iostream> #include<cstring> using namespace std; int main() { string s; cin>>s; cout<<s; return 0; }
这段代码首先定义了一个名为s 的空string,然后将标准输入的内容读取到s中。在执行读取操作时,string对象自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇到下一次空白为止。
如上所述,如果程序的输入时“ hello world!! ”(注意开头和结尾处的空格),输出将是“hello”,输出结果中没有任何空格。
2、和内置类型的输入输出一样,string对象的此类操作也是返回运算符左侧的运算对象作为其结果。因此,多个输入或者多个输出可以连着写在一起:
#include<iostream> #include<cstring> using namespace std; int main() { string s1,s2; cin>>s1>>s2; cout<<s1<<s2; return 0; }
假如上面的程序输入与之前的一样的内容,“ hello world!! ”,输出将是“helloworld!!”
3、getline读取一整行
如果使用这样的程序
#include<iostream> #include<cstring> using namespace std; int main() { string s1; while(cin>>s1) cout<<s1; cout<<endl; return 0; }
(上面是我的输入和输出)
有事我们希望能在最终得到的字符串中保留输入时的空白符,这时应该用getline函数代替之前的>>运算符。getline函数的参数是一个输入流和一个string对象。函数从给定的输入流中读取内容,直到遇到换行符为止。(触发getline函数返回的那个换行符实际上被丢弃啦,得到的string对象中并不包含换行符)
#include<iostream> #include<cstring> using namespace std; int main() { string s1; while(getline(cin,s1)) cout<<s1; cout<<endl; return 0; }
4、string::size_type类型
对于size函数来说,返回一个int或者所述的那样返回一个unsigned似乎都是合理的。但是size函数返回的是一个string::size_type类型的值,下面就对这种新类型稍作解释。
string 类及其他大多标准库函数都定义了几种配套的类型,这些配套类型体现在标准类型与机器无关的特性,类型size_type即是其中的一种。
由于size函数返回的是一个无符号整型数,因此切忌,如果在表达式中混用了带符号的数和无符号数可能产生意想不到的结果。
Tip:如果表达式中已经有了size()函数就不要在使用int了,这样可以避免混用int和unsigned可能带来的问题。
5、比较string对象
string类定义了几种用于比较字符串的运算符。这些比较运算符注意比较string对象中的字符,并且对大小写敏感。
上述这些运算符都按照字典顺序:
- 如果两个string对象的长度不同,而且较短的string对象的每个字符都与较长string对象对应位置上的字符相同,就说较短string对象小于较长string对象。
- 如果两个string对象在某些对应的位置上不一致,则string对象比较的结果是string对象中第一对相异字符比较的结果。
6、字面值和string对象相加
当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算符对象至少有一个时string
string s=‘hello‘+‘world‘;//错误:两个运算对象都不是string
string s1=s+‘,‘+‘xiao‘;//合法 相当于 string s1=(s+‘,‘)+‘xiao‘;因为其中s+‘,‘的结果是一个string对象。
string s2=‘hello‘+‘,‘+s;//不合法
Warning:C++语言中的字符串字面值并不是标准库类型string的对象。切记,字符串字面值与string是不同类型。(字符串字面值的类型是const char[N],而string是标准库类型)