我有这段代码:
string text;
getline(cin ,text);
istringstream iss(text);
copy(
istream_iterator<string>(iss),
istream_iterator<string>(),
ostream_iterator<string>(cout,"\n")
);
当我输入如:bf "inging" filename
之类的字符串时,它会输出:
bf
"inging"
filename
有没有办法可以将每个输出都保存到变量中?
答案 0 :(得分:0)
当然可以捕获不同的输出并使用它们执行某些操作:您将创建一个流缓冲区,用于检测换行符并对自上一个换行符后收到的字符执行某些操作。只有这样你才能将字符串转发到其他地方。虽然可行,但我怀疑这是你想要做的。
如果你想从流中捕获所有std::string
并且你不希望每个人都有一个特定的名字,例如,因为你不知道期望多少个字符串,你可以存储它们使用
std::vector<std::string>
std::vector<std::string> strings{ std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>() };
......或
std::vector<std::string> strings;
std::copy(std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>(),
std::back_inserter(strings));
如果你想在各个变量中包含字符串,你只需将它们读入变量并确保读取所有变量:
std::string a, b, c;
if (iss >> a >> b >> c) {
std::cout << "read a='" << a << "' b='" << b << " c='" << c << "'\n";
}
else {
std::cout << "failed to read three strings from line '" << text << "'\n";
}