2010-12-18 8 views
0

Ich hatte gehofft, herauszufinden, ob es einen Befehl in C++ gibt, der ähnliche Variationen zur Eingabe findet und diese ebenso akzeptiert wie die genauen Antworten in einer if-Anweisung.Ich muss ähnliche Antworten in C++ akzeptieren können, ohne "||" zu verwenden bars

Zum Beispiel:
Wenn ich einen Benutzertyp in „Hallo“
und die if-Anweisung „hallo“ muss akzeptieren gültig sein
wie kann ich es machen auch außer dass ohne in all eingeben zu müssen die Variationen selbst, was ist "||" tut.

Danke Jungs.

+2

Sie einen Groß- und Kleinschreibung Vergleich wollen? Wenn ja, siehe hier [http://stackoverflow.com/q/11635/380621] – tjm

+1

Hat C++ keine Funktion, um die Groß-/Kleinschreibung einer Zeichenkette zu ändern? –

+0

@Ignacio - In der Standardbibliothek? Keine einzige Funktion. Es gibt Toupper und Tolower, die auf einzelne Zeichen wirken. Sie können sie jedoch mit transform kombinieren, um auf eine ganze Saite zu wirken. Oder Sie können boost :: to_upper oder boost :: to_upper_copy verwenden. –

Antwort

2

Wie wäre es mit der Berechnung einer Art von edit distance. Sie können Falländerungen mit einer sehr geringen Entfernung gewichten und alle Eingaben akzeptieren, die unter einem bestimmten Schwellenwert liegen.

0

Wenn es viele Variationen gibt und deren Aufzählung mühsam ist, sollten Sie in Erwägung ziehen, die Eingabe über einen Regex-Parser auszuführen. Ein Leichtgewicht ist T-Rex.

0

Versehen Sie die Strings mit Großbuchstaben und vergleichen Sie dann die oberen Strings.

Beachten Sie, dass dies theoretisch verschiedene nationale Sprachkonventionen für den Großbuchstaben widersprechen kann. Dies scheint ein Grund dafür zu sein, dass die C++ - Standardbibliothek eine sehr schlechte Unterstützung für Großbuchstaben bietet (wenn sie nicht hundertprozentig perfekt durchgeführt werden kann) mach es nicht).

In der Praxis kann jedoch jede problematische nationale Zeichenkette einfach vermieden werden.

Prost & HTH.,

0

Kleinbuchstaben die Eingabezeichenfolge.
Dann vergleichen:

std::string answer; 
std::cin >> answer; 

std::transform(answer.begin(), answer.end(), answer.begin(), ::tolower); 
if (answer == "hi") 
{ 
    std::cout << "Wrong answer\n"; 
}