我正在尝试创建一个命令行应用程序,用户可以在其中输入命令和数据,但我真的不知道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;
}
答案 0 :(得分:0)
为什么不使用argc
和argv
参数?这样的东西..(尚未测试)
int main(int argc, char* argv[])
{
vector<string> vbuff(argc);
for (int i = 0; i < argc; ++i)
{
vbuff[i] = argv[i];
}
// From here, you can use vbuff for your own purposes.
}
答案 1 :(得分:0)
我不太确定你想要什么(我的英语很差..),也许你想要输入整行,直到输入 我想你可以使用cin.getline
char mbuf[1024];
cin.getline(buffer,1024);
答案 2 :(得分:0)
根据你的评论:“我正在以交互方式阅读输入.exit命令将离开while循环并结束程序”
在尝试处理输入字符串之前,最好先让这个简单的循环工作。
std::string inputCommand;
while(inputCommand != "Exit")
{
cin >> inputCommand;
//do stuff with it
}
然后你可以考虑拆分和处理字符串
bool shouldExit(false);
std::vector<std::string> inputsReceived;
while(!shouldExit)
{
char delim ('#'); //here put whatever character your inputs are separated by
std::string buffer;
cin >> buffer;
std::stringstream ss;
ss << buffer;
std::string item;
while (std::getline(ss, item, delim))
{
if (item == "Exit") //case sensitive
{
shouldExit = true;
break;
}
else
{
//do whatever with input
}
//if you want to keep a record of the inputs in a vector
inputsReceived.push_back(item);
}
}