2012-02-27 2 views
1

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

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

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

ответ

2

Если вы действительно должны использовать строки с стиле, вы могли бы использовать 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); 
} 
+0

Большое спасибо за всю информацию! Я знал, что это более простой способ, и функция strtok - это. – bsimmons

2
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); 
} 
Смежные вопросы