C++编程输入数组的处理——不给数组长度,直接给一行数组

正常情况下,我们要从键盘读一个数组,一般会先告诉你一个数组大小size,然后可以创建相应的数组a[size](注:C++11允许变量作为数组长度)或者建立vector<T>(size). 然后就可以用一个size次的循环正好把size个数组元素存进去。

int 
main()
{
       
int 
n = 0;
       cin >> n;
       
vector
<
int
> p(n);
       
for
(
int 
i = 0; i < n; i++){
              cin >> p[i];
       }
       
return 
0;
}

但是如果不给数组长度怎么办?直接扔给你一个行数组元素,怎么把他们存到对应整数数组中呢?


1.while(cin>>a[i++])好像是不可以的。cin>>操作符是根据后面变量的类型读取数据。
输入结束条件 :遇到Enter、Space、Tab键。 对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)
在VS2103中,输入一行数组元素之后他不会终止,会让你继续输入。

2.这种方法使用getchar和cin共同进行处理。假设输入为-1,1,-1,1。首先,cin>>会根据i的类型读一个int,他遇到space会终止,因此第一次得到-1,接着每次getchar都会得到一个空格,这时候继续读就会读到第二个元素1,一直while到终止条件,读到一个换行符“\n”.

int 
main()
{
   
       
vector
<
int
> a;
       
int 
i = 0;
       
do
{
              cin >> i;
              a.push_back(i);
       }
while
(getchar() !=
‘\n’
);
       
return
 0;
}

3.使用getline(cin, str)读到一行字符串,然后将getline得到的stringstream input中,然后input>>输出会被space截断,直接>>到一个int类型这种就可以自动实现类型转换,也很方便。当然也可以用atoi。

#include
<sstream> //注意加这个头
int 
main()
{
       
string 
str,temp;
       getline(cin, str);
       
int 
i = 0;
       
vector
<
int
> p;
       
stringstream 
input(str);
       
while
(input >> i){
              p.push_back(i);
       }      
       
return 
0;
}

点赞