2016-03-20 5 views
0

Ich erstelle ein Henker-Spiel für die Schule. Die zu erratenen Wörter werden aus einer Datendatei gezogen, das Programm wählt das letzte Wort aus der Datei als das für das Spiel zu verwendende Wort, 'words' ist die Variable, die ich dafür verwendet habe, wie das Spiel geht , der Benutzer errät einen Buchstaben und wenn der Buchstabe in dem Wort ist, ist es korrekt und wenn nicht, ist es inkorrekt und das Programm zeigt progressiv eine "Tafel" oder ein Bild des Henkers an.mit str.find() zu sehen, ob ein bestimmter Buchstabe in einem Wort ist

ich str.find() erraten, um zu sehen verwendet, wenn der Buchstabe im Wort ist, wird der Code wie folgt:

while (wrongGuess < 7){ 
    cout << "\nGuess a letter in the word: " << endl; 
    cin >> guess; 

    if (words.find(guess)==true){ 
     cout << "Correct! " << guess << " is FOUND in the word " << word << endl; 
     continue;} 
    else 
     {cout << guess << " is NOT FOUND in the word " << endl; 
     wrongGuess++; 
     if(wrongGuess == 1) 
      cout << board2; 
     else if(wrongGuess == 2) 
      cout << board3; 
     else if(wrongGuess == 3) 
      cout << board4; 
     else if(wrongGuess == 4) 
      cout << board5; 
     else if(wrongGuess == 5) 
      cout << board6; 
     else if(wrongGuess == 6) 
      cout << board7 << "\nSorry Game Over"; 
     } 

Das Wort, das programming ist, verwendet wird.

Mein Problem ist manchmal, wenn ich einen richtigen Brief eingeben (wie r) es sagt mir, ich habe Recht, andere Male gebe ich einen anderen richtigen Brief (p) und das Programm sagt mir, dass ich falsch liege.

Was habe ich falsch?

+0

'words.find (Vermutung) == true' - aber string :: kehrt Position zu finden, nicht ein wahr/falsch ... –

+0

beachten Sie auch die "Zeichenfolge, die die STL-Container" Schnittstelle (mit std :: find) anstelle der Elementfunktion; Diese Schnittstelle ist konsistenter mit dem Rest der Sprache als die Aufeinanderfolge von Elementfunktionen –

Antwort

1

std::basic_string::find aka. std::string::find gibt die Position des angegebenen Zeichens in der Zeichenfolge zurück, nicht bool.

Der Code, den Sie gepostet haben, funktioniert manchmal, weil true zu 1 verfällt und wenn das gesuchte Zeichen auf Position 1 ist, ist die Bedingung wahr.

es zu beheben, sollten Sie dies tun:

... 
if (words.find(guess)!=std::string::npos){ 
    ... 

std::basic_string::find

1

Verwenden std::string::npos th find Ergebnis zu überprüfen.

if(words.find(guess) != std::string::npos) 
{ 
    //... 
} 
else 
{ 
} 
Verwandte Themen