C ++ Загрузка пользовательского ввода в вектор

Я пытаюсь создать приложение для командной строки, где пользователь может вводить команды и данные, но я не совсем понимаю, как работает 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

Решение

Почему бы тебе просто не использовать 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.
}
0

Другие решения

Я не очень уверен, что ты хочешь (мой плохой английский ..), может быть, вы хотите получить ввод всей строки до ввода
Я думаю, что вы можете использовать cin.getline

    char mbuf[1024];
cin.getline(buffer,1024);
0

На основании вашего комментария: «Я читаю ввод в интерактивном режиме. Команда выхода вышла бы из цикла 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);
}
}
0
По вопросам рекламы [email protected]