我正在尝试创建一个从控制台获取输入的程序,并读取由空格分隔的每个单词和数字,并将其存储在矢量字符串中以供进一步处理。
void foo() {
string input;
vector<string> list;
while (getline(cin, input, ' '))
{
list.push_back(input);
}
for (int counter = 0; counter < list.size(); counter++)
{
cout << list[counter] << endl;
}
};
int main()
{
foo();
return 0;
}
当getline没有停止在换行符处读取并且你需要ctrl + z到EOF时出现问题。有没有让getline在换行线停止?
答案 0 :(得分:1)
首先获取该行,然后使用istringstream
提取其中的字符串。
string line;
getline(cin, line);
istringstream iss(line); //need <sstream>
vector<string> inputStrings;
for (string s; iss >> s; inputStrings.push_back(s));
答案 1 :(得分:0)
这种事情通常可以用标准库表达得更好:
#include <iterator>
#include <iostream>
#include <vector>
int main(int argc, char** argv) {
std::vector<std::string> list;
std::copy(std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>(),
std::back_inserter(list));
}