C ++, как получить множественный ввод, разделенный пробелом? - PullRequest
1 голос
/ 27 февраля 2012

У меня есть программа, которая должна получить несколько строк.Сейчас я получаю по одному, а затем спрашиваю, не хотите ли вы ввести другое слово.Я не могу найти простой способ получить только один вход со словами, разделенными пробелами.то есть "один два три" и сохранить входные данные в массиве cstrings.

typedef char cstring[20]; cstring myWords[50];

В данный момент я пытаюсь использовать getline и сохранить ввод в cstring, а затем я пытаюсь использоватьБиблиотека string.h для управления ею.Это правильный подход?Как еще это можно сделать?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012
std::vector<std::string> strings;
for (int i = 0; i < MAX_STRINGS && !cin.eof(); i++) {
  std::string str;
  std::cin >> str;
  if (str.size())
    strings.push_back(str);
}
2 голосов
/ 27 февраля 2012

Если вы действительно должны использовать строки в стиле c, вы можете использовать функции istream::getline, strtok и strcpy:

typedef char cstring[20];           // are you sure that 20 chars will be enough?
cstring myWords[50];
char line[2048];                    // what's the max length of line?
std::cin.getline(line, 2048);

int i = 0;
char* nextWord = strtok(line, " \t\r\n");
while (nextWord != NULL)
{
    strcpy(myWords[i++], nextWord);
    nextWord = strtok(NULL, " \t\r\n");
}

Но гораздо лучше было бы использовать операторы std::string, std::getline, std::istringstream и >>:

using namespace std;
vector<string> myWords;

string line;
if (getline(cin, line))
{
    istringstream is(line);
    string word;
    while (is >> word)
        myWords.push_back(word);
}
...