2010-05-13 18 views
5

Sto lavorando con le stringhe in C++. Recentemente ho riscontrato un problema durante l'inserimento delle stringhe. Sto usando cin >> string; per ottenere la mia stringa come input dell'utente. Quando l'utente inserisce uno spazio nella stringa, l'input successivo viene compilato automaticamente con le lettere rimanenti o, a volte, lasciato vuoto. Poiché la stringa di input successiva è spesso un numero intero, ciò causerà un bug sgradevole. Qual è una buona soluzione per questo?Utilizzo di stringhe in C++

EDIT: Ecco il codice corrente:

cout << "Please print the enemy's name: "; 
getline(cin, enemyName); 

risposta

7

Probabilmente si vuole ottenere tutto l'input nella stringa fino l'utente preme Invio. In quel caso, si può dire che quello che vuoi veramente è leggere una "linea" di testo. Per fare questo, utilizza std::getline, in questo modo:

std::getline(cin, enemyName); 

che sta assumendo enemyName è definito come uno std :: string. Se il nome nemico è un array charater c-stile, che ci si vuole utilizzare cin.getline, in questo modo:

cin.getline(enemyName, sizeof(enemyName)); 

Ma, tenta di evitare l'uso di array di caratteri C-stile a tutti in C++.

+1

@SoapBox Spiacente, non ho familiarità con quella funzione. Se sto usando lo spazio dei nomi std, avrei bisogno della prima riga? –

+0

La prima riga definisce una stringa denominata "str". Ora che hai aggiunto un codice di esempio, posso darti un esempio migliore, quello che vuoi è: std :: getline (cin, enemyName); ... editò la risposta. – SoapBox

+0

Corretto: potresti lasciare "std ::" se stai usando "using namespace std;" linea nel tuo codice – Adam

2

Utilizzare invece getline(cin, string);.

2

Utilizzare getline() per leggere un'intera riga alla volta.

getline (cin, string); 
3

Il comportamento di >> con stringhe è intenzionale; interpreta i caratteri dello spazio bianco come delimitatori su cui fermarsi, quindi è davvero il meglio delle parole masticabili. std :: getline() (#include <string>) usa '\ n' come delimitatore di default, ma c'è anche una versione di std :: getline() che prende un carattere delimitatore personalizzato se ne hai bisogno.

+0

Grazie mille. Potresti (mi sento stupido in questo momento) mostrarmi come usarlo in relazione al mio codice corrente (usando namespace std)? –

+0

http://www.cplusplus.com/reference/string/getline/ - Questo articolo contiene la sintassi e alcuni esempi.getline (std, somestring, '\ t') si fermerebbe in una scheda, ad esempio ... – Adam

+0

@Adam Doyle Grazie mille, quella pagina ha un valore inestimabile. Se potessi accettare anche la tua risposta, lo farei. –