设为首页 加入收藏

TOP

3.2.2 String的读写
2013-10-07 00:31:05 来源: 作者: 【 】 浏览:59
Tags:3.2.2 String 读写

3.2.2  String的读写

我们已在第1章学习了用iostream标准库来读写内置类型的值,如int,double等。同样地,也可以用iostream和string标准库,使用标准输入输出操作符来读写string对象:

// Note: #include and using declarations must be added to compile this code
int main()
{
    string s;             // empty string
    cin >> s;             // read whitespace-separated string into s
    cout << s << endl;  // write s to the output
    return 0;
}

以上程序首先定义命名为s的字符串,第二行代码:

cin >> s;        // read whitespace-separated string into s

从标准输入读取string,并将读入的串存储在s中。string类型的输入操作符:

读取并忽略开头所有的空白字符(如空格,换行符,制表符)。

读取字符直至再次遇到空白字符,读取终止。

因此,如果输入到程序的是“   Hello World!   ”(注意到开头和结尾的空格),则屏幕上将输出“Hello”,而不含任何空格。

输入和输出操作的行为与内置类型操作符基本类似。尤其是,这些操作符返回左操作数作为运算结果。因此,我们可以把多个读操作或多个写操作放在一起:

string s1, s2;
cin >> s1 >> s2; // read first input into s1, second into s2
cout << s1 << s2 << endl; // write both strings

如果给定和上一个程序同样的输入,则输出的结果将是:

HelloWorld!

对于上例,编译时必须加上#include来标示iostream和string标准库,以及给出用到的所有标准库中的名字(如string,cin,cout,endl)的using声明。

从本例开始的程序均假设程序中所有必须的#include和using声明已给出。

1. 读入未知数目的string对象

和内置类型的输入操作符一样,string的输入操作符也会返回所读的数据流。因此,可以把输入操作作为判断条件,这与我们在1.4.4节读取整型数据的程序做法是一样的。下面的程序将从标准输入读取一组string对象,然后在标准输出上逐行输出:

int main()
{
    string word;
    // read until end-of-file, writing each word to a new line
    while (cin >> word)
       cout << word << endl;
    return 0;
}

上例中,用输入操作符来读取string对象。该操作符返回所读的istream对象,并在读取结束后,作为while的判断条件。如果输入流是有效的,即还没到达文件尾且没遇到无效输入,则执行while循环体,并将读取到的字符串输出到标准输出。如果到达了文件尾,则跳出while循环。

2. 用getline读取整行文本

另外还有一个有用的string IO操作:getline。这个函数接受两个参数:一个输入流对象和一个string对象。getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。和输入操作符不一样的是,getline并不忽略行开头的换行符。只要getline遇到换行符,即便它是输入的第一个字符,getline也将停止读入并返回。如果第一个字符就是换行符,则string参数将被置为空string。

getline函数将istream参数作为返回值,和输入操作符一样也把它用作判断条件。例如,重写前面那段程序,把每行输出一个单词改为每次输出一行文本:

int main()
{
    string line;
    // read line at time until end-of-file
    while (getline(cin, line))
       cout << line << endl;
    return 0;
}

由于line不含换行符,若要逐行输出需要自行添加。照常,我们用endl来输出一个换行符并刷新输出缓冲区。

注意由于getline函数返回时丢弃换行符,换行符将不会存储在string对象中。

习题                                                           

习题3.5  编写程序实现从标准输入每次读入一行文本。然后改写程序,每次读入一个单词。

习题3.6  解释string类型的输入操作符和getline函数分别如何处理空白字符。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.1 命名空间using声明 下一篇3.3.1 vector对象的定义和初始化

评论

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