如何从用户处获取数字列表,然后将其标记化。
这就是我所拥有的,但除了第一个数字之外它没有得到任何东西:
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string line = "";
cin >> line;
stringstream lineStream(line);
int i;
vector<int> values;
while (lineStream >> i)
values.push_back(i);
for(int i=0; i<values.size(); i++)
cout << values[i] << endl;
system("PAUSE");
return 0;
}
相关文章:
C++, Going from string to stringstream to vector
Int Tokenizer
答案 0 :(得分:5)
这可能是将cin
中的值读入容器的最简单方法:
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> values;
std::copy(
std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(values));
// For symmetry with the question copy back to std::cout
std::copy(
values.begin(),
values.end(),
std::ostream_iterator<int>(std::cout,"\n"));
}
答案 1 :(得分:4)
我相信cin&gt;&gt;在空格上打破,这意味着您只获得输入的第一个数字。
尝试:
getline(cin, line);
答案 2 :(得分:1)
就像Donnie在空白处提到cin中断一样,所以要克服这个问题我们可以使用'getline()',以下示例很有效:
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string line = "";
::getline(std::cin,line,'\n');
std::stringstream lineStream(line);
int i;
std::vector<int> values;
while (lineStream >> i)
values.push_back(i);
for(int i=0; i<values.size(); i++)
cout << values[i] << endl;
system("PAUSE");
return 0;
}
答案 3 :(得分:0)
在主
之上string line = "";
getline (cin, line );
stringstream lineStream(line);
答案 4 :(得分:0)
是的,是getline的字符串版本,没有istream版本。
答案 5 :(得分:0)
好的:Pavel Minaev有最好的答案 但所有人都提到白色空间上的cin断裂 这是一件好事(因为它也忽略了空格);
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
int i;
vector<int> values;
// prefer to use std::copy() but this works.
while (std::cin >> i)
{
values.push_back(i);
}
// prefer to use std::copy but this works.
for(vector<int>::const_iterator loop = values.begin();loop != values.end();++loop)
{
cout << *loop << endl;
}
return 0;
}