2012-02-27 16 views
1

J'ai un programme qui a besoin de plusieurs chaînes. Je prends actuellement un à la fois et puis demande si vous voulez entrer un autre mot. Je ne peux pas trouver un moyen simple d'obtenir une seule entrée avec des mots divisés par des espaces. c'est-à-dire "un deux trois" et sauvegardez l'entrée dans un tableau de chaînes.C++, Comment obtenir plusieurs entrées divisées par des espaces?

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

En ce moment je suis en train d'utiliser getline et enregistrer l'entrée d'un cstring puis je suis en train d'utiliser la bibliothèque string.h pour le manipuler. Est-ce la bonne approche? Sinon, comment cela pourrait-il être fait?

Répondre

2

Si vous avez vraiment devez utiliser des chaînes c de style, vous pouvez utiliser istream::getline, strtok et strcpy fonctions:

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"); 
} 

Mais beaucoup mieux serait d'utiliser std::string, std::getline, std::istringstream et >> opérateur à la place :

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

Merci beaucoup pour toutes les informations !! Je savais que c'était un moyen plus facile, et la fonction Strtok était. – 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); 
} 
Questions connexes