c++ in>>s>>t表示什么意思

天王盖地虎626 发布于 02/12 23:20
阅读 187
收藏 0

标红的地方,表示什么意思啊? s,t是如何接受文件string.txt中的内容的啊?

加载中
1
tcxu
tcxu

在C++中,对文件的操作是通过stream的子类 fstream(file stream)来实现的。
ifstream in("string.txt"); //以输入方式打开与代码处于同一文件夹的文件: string.txt, in 代表输入流 ifstream 对象。
for 循环的初始状态:string s,t; 调用默认构造函数,s, t 分别为空字符串。
for 循环的运行条件是; in>>s>>t 。其中:
析取器(>>),所示的功能:从流中输入数据。
每次 in>>s>>t 的操作是:
将初始(或余下)的数据的第一个字符串数据存入字符串 s,然后,将下面的第二个字符串数据存入字符串 t。
识别字符串的具体操作是:
逐个读取字符文档的字符,将其依次放入缓冲区 in 之中, 直到遇到空格或换行符为止。然后,将 缓冲区 in 数据存入字符串 s 或 t。
测试案例如下:
代码:

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int main(){	
	ifstream in("string.txt");
	for (string s ,t; in>>s>>t  ;  ){	
	cout<<"s: "<<s<<endl;
	cout<<"t: "<<t<<endl;
	}
}


字符串文档 string.txt:

绿竹别其三分景 红梅正报万家春 横批:春回大地
年年顺景则源广 岁岁平安福寿多 横批:吉星高照
五更分两年年年称心 一夜连两岁岁岁如意 横批:恭贺新春

输出:

s: 绿竹别其三分景
t: 红梅正报万家春
s: 横批:春回大地
t: 年年顺景则源广
s: 岁岁平安福寿多
t: 横批:吉星高照
s: 五更分两年年年称心
t: 一夜连两岁岁岁如意

解释:
for循环体的运行条件:每次先后成功地将两个字符串存入s,t。
最后,in 仅找到最后一个字符串 “横批:恭贺新春”存入 s,  然后,再找,遇到"EOF",结果没有数据存入t。于是 未能满足运行条件: in>>s>>t ,故跳出循环,结束运行。导致 漏掉 "横批:恭贺新春"

讨论:
1.   for 循环的条件 in>>s>>t 可以用另一种形式表示: in>>s && in>>t
2.   如果要获得全部数据,即包括最后一个字符串,for 循环的条件,以改写成 in>>s || in>>t。这时只要 in>>s 成立,就满足for 循环的条件,因此 仅通过字符串s就获得全部数据, t成了多余的。
3.   总之,一行代码 in>>s1>>s2>>...sn;    等价于n行代码:
in>>s1;
in>>s2;
...
in>>sn;

 

 

 

0
快乐的一只小青蛙
快乐的一只小青蛙

和cin/cout类似,不懂就该补补C++基础了

天王盖地虎626
天王盖地虎626
是要好好补补c++,用的少,主要用android的多
0
star1024_cn
star1024_cn

>>是读取操作;<<是写操作。

快乐的一只小青蛙
快乐的一只小青蛙
这个说法不是很准确
返回顶部
顶部