C++中的string对象(2)——string对象上的操作

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的对象。

猜你喜欢

转载自blog.csdn.net/qq_37568748/article/details/81628439