吐槽
昨晚看了一晚上博客,发现大部分博客都没有实现这样一个功能:键盘输入不定长度的数组,这样一个看似简单的事情实现起来真的不怎么容易(太菜了 ).甚至有些博客上的代码明明放在VS上根本运行不了,却放在博客上误人子弟,我…
思路
先输入字符串,再将字符串转化为整数,使用string的功能string.str()和头文件sstream中的stringstream类的功能完成转化,万事俱备只欠代码,来,上代码!
代码
#include<vector>
#include<string>
#include<iostream>
#include<stdio.h>
#include<cstdlib>
#include<sstream>
using namespace std;
int string_to_num(string a)
{
stringstream ss(a); //字符串转数组的标准代码,大家可以自行实验
int num = 0;
ss >> num;
return num;
}
void transfer(string& S, vector<int>& A)
{
int flag = 0;
int i = 0,j = 0;
for (string::iterator s = S.begin(); s != S.end(); ++s,++j)
{
if (*s != ' ')
{
continue;
}
else {
A.push_back(string_to_num(S.substr(i, j - i))); //从i字符截取到j字符,截取长度为j-i
while(S[j+1]==' ')
{
s++;
j++;
}//为了避免连续输入空格,这里需要跳过重复的空格,使用while循环即可
i = j;
}
}
A.push_back(string_to_num(S.substr(i, j - i))); //从i字符截取到j字符
}
int main()
{
vector<int> A1;
// vector<int> A2;
string s1;
// string s2;
getline(cin, s1);
// getline(cin, s2);
transfer(s1,A1);
// transfer(s2, A2);
for (vector<int>::iterator a = A1.begin(); a != A1.end(); ++a)
{
cout << *a << " ";
}
cout << endl;
return 0;
}
很多东西,并没有看起来那样简单,还是需要我们躬行,加油!
后记:在博友的提示下我重新拾起了这个问题,发现最好的解决方法其实是这样的:
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
int a;
vector<int> vec;
while (scanf_s("%d",&a)!= EOF)
{
vec.push_back(a);
}
for (auto i : vec)
{
cout << i << endl;
}
return 0;
}
当然这种方法每次运行输入完数据后要输入ctrl+z ,有时候你需要输入不止一遍,索性多输入几遍好了,直到输入完毕.