前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >连续多行输入--C++ 中字符串标准输入的学习及实验(续篇)

连续多行输入--C++ 中字符串标准输入的学习及实验(续篇)

作者头像
用户1215536
发布2018-02-05 14:33:14
3.3K0
发布2018-02-05 14:33:14
举报

编程中常常会用到连续多行输入的情况,如果事先知道要输入多少行的话,可以直接定义一个变量,然后用循环就可以实现了,但有时候事先并不知道,要输入多少行,于是就可以用到输入流碰到文件终止符的情况了,具体的操作就是ctrl+Z,然后按下回车键

程序例1

代码语言:javascript
复制
 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int num;
 9     vector <int>nums;
10     while(cin>>num)
11     {
12         nums.push_back(num);
13     }
14     vector<int>::iterator it;
15     for(it=nums.begin();it!=nums.end();it++)
16     {
17         cout<<(*it)<<endl;
18     }
19 
20     return 0;
21 }

程序例2

代码语言:javascript
复制
 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 using namespace std;
 5 
 6 int main()
 7 { 
 8      string q;
 9     vector<string>save_q;
10     while(getline(cin,q))
11     {
12         save_q.push_back(q);
13     }
14     vector<string>::iterator it;
15     for(it=save_q.begin();it!=save_q.end();it++)
16     {
17         cout<<(*it)<<endl;
18     }
19     return 0;
20 }

程序例3

代码语言:javascript
复制
 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8 
 9     char * p;
10     vector<char *>save_p;  //为什么用char * 就不能存进去值
11     p=new char[8];
12     while(cin.getline(p,8))
13     {
14         save_p.push_back(p);
15         p=new char[8];
16     }
17     vector<char *>::iterator it;
18     for(it=save_p.begin();it!=save_p.end();it++)
19     {
20         cout<<(*it)<<endl;
21     }
22 
23 
24 
25     return 0;
26 }

程序例4

代码语言:javascript
复制
 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8 
 9     char p[100];
10     //vector<char *>save_p;  //为什么用char * 就不能存进去值
11     vector<string>save_p;
12     while(cin.getline(p,8))
13     {
14         save_p.push_back(p);
15         //cout<<p<<endl;
16     }
17     //vector<char *>::iterator it;
18     vector<string>::iterator it;
19     for(it=save_p.begin();it!=save_p.end();it++)
20     {
21         cout<<(*it)<<endl;
22     }
23 
24     return 0;
25 }

上面是四组测试程序,全部通过,但是第4四组,刚开始不小心写成了注释掉的那几行,结果总是错误,后来发现原因是这样的,char p[100]; 是在编译的时候就已经确定了p的地址,所以每次输入的时候都是在往同一个地址对应的地方存值,导致vector<char *>里面存的值也都是同一个地址里面的数,所以每次存新值的时候都把前面的覆盖掉了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-03-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档