Anstatt mit schmutzigen Daten zu arbeiten, ist es oft besser, sie zu bereinigen und dann damit zu arbeiten. Die Bereinigung muss nur einmal durchgeführt werden, während schmutzige Daten jedes Mal, wenn Sie sie verwenden müssen, die Komplexität des Codes erhöhen. Dieser Schritt wird oft als "Normalisierung" bezeichnet. Normalisieren Sie die Eingabe in eine kanonische Form, bevor Sie sie verwenden.
Bereinigen Sie die Eingabe, indem Sie Whitespace trimmen und eine andere Normalisierung durchführen (z. B. Falten und Normalisieren des internen Leerraums).
Sie könnten Ihre eigene Trim-Funktion schreiben, aber ich würde Ihnen empfehlen, eine bereits existierende Funktion wie Gnome Lib's g_strstrip() zu verwenden. Gnome Lib bringt viele nützliche Funktionen mit.
#include <glib.h>
void normalize_cmd(char *str) {
g_strstrip(str);
// Any other normalization you might want to do, like
// folding multiple spaces or changing a hard tab to
// a space.
}
Dann können Sie strcmp
auf dem normalisierten Eingang verwenden.
// This isn't strictly necessary, but it's nice to keep a copy
// of the original around for error messages and such.
char *cmd = g_strdup(input);
normalize_cmd(cmd);
if (strcmp(cmd, "drop all") == 0) {
puts("yes");
}
else {
puts("no");
}
Wenn man die gesamte Normalisierung in den Vordergrund stellt, reduziert sich die Komplexität des gesamten nachgelagerten Codes, der mit diesem Eingang arbeiten muss; Sie müssen nicht dieselben Bedenken bezüglich schmutziger Daten wiederholen. Indem Sie die gesamte Normalisierung an einer Stelle platzieren und nicht über den gesamten Code verstreut sind, sind Sie sicher, dass sie konsistent ist und die Normalisierungsmethode konsistent aktualisiert werden kann.
Sie scheinen ein falsches Werkzeug für den Job gewählt zu haben ... –
@EugeneSh. vielleicht, aber einige Befehle nehmen auch Zahlen usw. als Argumente. Das ist also ein Spezialfall ohne Argumente. – mwarning