【发布时间】:2013-11-19 16:24:40
【问题描述】:
我正在尝试创建一个命令行应用程序,用户可以在其中输入命令和数据,但我并不真正了解 istream_iterator 是如何工作的,我怎样才能将整个输入(直到输入)输入到向量中?现在它会在每个单词上创建一个新的 while 循环,这不是我们想要的。
int main(int argc, char* argv[])
{
string buffer;
//vector<string> vbuff;
CliHandler clihandler(argc, argv);
int state = clihandler.State();
while (state != CliHandler::STATE_EXIT) {
cout << ">>";
//Beolvasás
cin >> buffer;
stringstream sstream(buffer);
istream_iterator<string> begin(sstream);
istream_iterator<string> end;
vector<string> vbuff(begin,end);
copy(vbuff.begin(), vbuff.end(), std::ostream_iterator<string>(std::cout, "\n"));//test
//vbuff = vector<string>((istream_iterator<string>(cin)), istream_iterator<string>());
//copy(vbuff.begin(), vbuff.end(), std::ostream_iterator<string>(std::cout, "\n"));
switch(clihandler.State(vbuff[0])) {
// [command] [data1] [data2] ...
}
}
return 0;
}
【问题讨论】:
-
我假设您从 stackoverflow 问题 How to split a string in C++? 中获得了此代码。我建议您使用this answer,因为它更具可扩展性。
-
我试过了,不知道怎么用。为什么你需要一个 const 字符串才能使用它,我不明白。
-
据我所知,您正在尝试编写拆分字符串的代码。即它将需要一长串字符将其拆分为一个较小块的向量。但是,您在顶部的描述是关于阅读用户输入的。你确定你已经考虑过你想做的事情吗?我可以看到两种可能性:1)读取输入,拆分输入并存储,结束。或者 2) 读取输入、存储输入、读取更多输入、存储输入等
-
我正在以交互方式阅读输入。 exit 命令将退出 while 循环并结束程序。
标签: c++ vector command-line-interface istream-iterator