设为首页 加入收藏

TOP

3.2.2 string对象上的操作(1)
2013-10-07 16:27:35 来源: 作者: 【 】 浏览:93
Tags:3.2.2 string 对象 操作

3.2.2  string对象上的操作(1)

一个类除了要规定初始化其对象的方式外,还要定义对象上所能执行的操作。其中,类既能定义通过函数名调用的操作,就像Sales_item类的isbn函数那样(参见1.5.2节,第23页),也能定义<<、+等各种运算符在该类对象上的新含义。表3.2中列举了string的大多数操作。

表3.2: string的操作

3.2 string的操作

os<<s

s写到输出流os当中,返回os

is>>s

is中读取字符串赋给s,字符串以空白分隔,返回is

getline(is, s)

is中读取一行赋给s,返回is

s.empty()

s为空返回true,否则返回false

s.size()

返回s中字符的个数

s[n]

返回s中第n个字符的引用,位置n0计起

s1+s2

返回s1s2连接后的结果

s1=s2

s2的副本代替s1中原来的字符

s1==s2

如果s1s2中所含的字符完全一样,则它们相等;

string对象的相等性判断对字母的大小写敏感

s1!=s2

<, <=, >, >=

利用字符在字典中的顺序进行比较,且对字母的大小写敏感

读写string对象

第1章曾经介绍过,使用标准库中的iostream来读写int、double等内置类型的值。同样,也可以使用IO操作符读写string对象:

  1. // 注意:要想编译下面的代码还需要适当的#include语句和using声明  
  2. int main()  
  3. {  
  4.     string s;               // 空字符串  
  5.     cin >> s;               // 将string对象读入s,遇到空白停止  
  6.     cout << s << endl;      // 输出s  
  7.     return 0;  

这段程序首先定义一个名为s的空string,然后将标准输入的内容读取到s中。在执行读取操作时,string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白为止。

如上所述,如果程序的输入是"    Hello World!    "(注意开头和结尾处的空格),则输出将是"Hello",输出结果中没有任何空格。

和内置类型的输入输出操作一样,string对象的此类操作也是返回运算符左侧的运算对象作为其结果。因此,多个输入或者多个输出可以连写在一起:

  1. string s1, s2;  
  2. cin >> s1 >> s2;            // 把第一个输入读到s1中,第二个输入读到s2中  
  3. cout << s1 << s2 << endl;   // 输出两个string对象 

假设给上面这段程序输入与之前一样的内容"    Hello World!    ",输出将是"HelloWorld!"。

读取未知数量的string对象

1.4.3节(第14页)的程序可以读入数量未知的整数,下面编写一个类似的程序用于读取string对象:
 

  1. int main()  
  2. {  
  3.     string word;  
  4.     while (cin >> word)             // 反复读取,直至到达文件末尾  
  5.         cout << word << endl;   // 逐个输出单词,每个单词后面紧跟一个换行  
  6.     return 0;  

在该程序中,读取的对象是string而非int,但是while语句的条件部分和之前版本的程序是一样的。该条件负责在读取时检测流的情况,如果流有效,也就是说没遇到文件结束标记或非法输入,那么执行while语句内部的操作。此时,循环体将输出刚刚从标准输入读取的内容。重复若干次之后,一旦遇到文件结束标记或非法输入循环也就结束了。

使用getline读取一整行

有时我们希望能在最终得到的字符串中保留输入时的空白符,这时应该用getline函数代替原来的>>运算符。getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读进来了),然后把所读的内容存入到那个string对象中去(注意不存换行符)。getline只要一遇到换行符就结束读取操作并返回结果,哪怕输入的一开始就是换行符也是如此。如果输入真的一开始就是换行符,那么所得的结果是个空string。

和输入运算符一样,getline也会返回它的流参数。因此既然输入运算符能作为判断的条件(参见1.4.3节,第14页),我们也能用getline的结果作为条件。例如,可以通过改写之前的程序让它一次输出一整行,而不再是每行输出一个词了:

  1. int main()  
  2. {  
  3.     string line;  
  4.     // 每次读入一整行,直至到达文件末尾  
  5.     while (getline(cin, line))  
  6.         cout << line << endl;  
  7.     return 0;  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.2 标准库类型string 下一篇3.2.2 string对象上的操作(2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)