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

时间:2023-03-09 16:46:01
连续多行输入--C++ 中字符串标准输入的学习及实验(续篇)
 
编程中常常会用到连续多行输入的情况,如果事先知道要输入多少行的话,可以直接定义一个变量,然后用循环就可以实现了,但有时候事先并不知道,要输入多少行,于是就可以用到输入流碰到文件终止符的情况了,具体的操作就是ctrl+Z,然后按下回车键

程序例1

 #include<iostream>
#include<string>
#include<vector>
using namespace std; int main()
{
int num;
vector <int>nums;
while(cin>>num)
{
nums.push_back(num);
}
vector<int>::iterator it;
for(it=nums.begin();it!=nums.end();it++)
{
cout<<(*it)<<endl;
} return ;
}

程序例2

 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

 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

 #include<iostream>
#include<string>
#include<vector>
using namespace std; int main()
{ char p[];
//vector<char *>save_p; //为什么用char * 就不能存进去值
vector<string>save_p;
while(cin.getline(p,))
{
save_p.push_back(p);
//cout<<p<<endl;
}
//vector<char *>::iterator it;
vector<string>::iterator it;
for(it=save_p.begin();it!=save_p.end();it++)
{
cout<<(*it)<<endl;
} return ;
}

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