从标准输入获取数字列表并标记它们
Posted
技术标签:
【中文标题】从标准输入获取数字列表并标记它们【英文标题】:get list of numbers from stdin and tokenize them 【发布时间】:2009-07-17 21:43:17 【问题描述】:如何从用户那里获取数字列表,然后对它们进行标记。
这是我所拥有的,但除了第一个数字之外什么都没有:
#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 vectorInt Tokenizer
【问题讨论】:
在一行中输入多个数字,以空格分隔,然后回车,它将获取所有数字。问题是您只阅读第一行。 【参考方案1】:这可能是从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"));
【讨论】:
【参考方案2】:我相信 cin >> 会在空格处中断,这意味着您只会输入第一个数字。
尝试:
getline(cin, line);
【讨论】:
如果你把它放在一个循环中就不行:while(std::cin >> i) /* Do STUFF */ 为什么要循环,什么时候可以一次调用?【参考方案3】:就像 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;
【讨论】:
【参考方案4】:在主目录之上
string line = "";
getline (cin, line );
stringstream lineStream(line);
【讨论】:
【参考方案5】:是的,并且是字符串版本的 getline,而不是 istream 版本。
【讨论】:
【参考方案6】:好的: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;
【讨论】:
以上是关于从标准输入获取数字列表并标记它们的主要内容,如果未能解决你的问题,请参考以下文章