Inkrementieren von Zeigern für *char in einer while-Schleife
Hier ist was ich habe:
char* input = new char [input_max]
char* inputPtr = iput;
Ich will das inputPtr zum Durchlaufen des Arrays input. Aber ich bin nicht sicher, was richtig prüfen Sie, ob oder nicht erreicht habe ich das Ende der Zeichenfolge:
while (*inputPtr++)
{
//Some code
}
oder
while (*inputPtr != '\0')
{
inputPtr++;
//Some code
}
oder eine elegantere Möglichkeit?
Sie sind gleichwertig. Natürlich, Sie müssen sicherstellen, dass es ist eigentlich eine
Dies ist eine Frage von, was Sie in Ihrem array. Sind Sie sicher, dass Sie einen
Ich bin neu in der Programmierung, so entschuldigen Sie mich, wenn das, was ich zu Fragen ist überflüssig, aber ist '\0' == 0?
"ist '\0' == 0" - Ja. Schau hier.
So bedeutet das, dass die while-Anweisung prüft zunächst den Wert des inputPtr nach aufgelöst, und dann erhöht die die Speicher-Adresse, gespeichert in inputPtr??? (Ich bin noch neu auf Zeigern, also bin ich verwirrt, wenn es um diese Dinge geht)
\0
im array.Dies ist eine Frage von, was Sie in Ihrem array. Sind Sie sicher, dass Sie einen
'\0'
element in deinem array? Wenn es Sie gibt, sind Sie sicher, dass die '\0'
element ist in den Grenzen des Arrays?Ich bin neu in der Programmierung, so entschuldigen Sie mich, wenn das, was ich zu Fragen ist überflüssig, aber ist '\0' == 0?
"ist '\0' == 0" - Ja. Schau hier.
So bedeutet das, dass die while-Anweisung prüft zunächst den Wert des inputPtr nach aufgelöst, und dann erhöht die die Speicher-Adresse, gespeichert in inputPtr??? (Ich bin noch neu auf Zeigern, also bin ich verwirrt, wenn es um diese Dinge geht)
InformationsquelleAutor Bbvarghe | 2013-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, input-string ist null-terminiert:
Beachten Sie, dass das Beispiel, das Sie geschrieben ist, kann nicht geben die Ergebnisse, die Sie wollen. In deiner while-Schleife Bedingung, Sie sind immer die Durchführung einer post-Inkrement. Wenn Sie innerhalb der Schleife, die Sie bereits an den ersten Charakter. Nehmen Sie dieses Beispiel:
Dieser Ausgänge:
Beachten Sie die fehlende erste Zeichen und die extra
_
Unterstrich am Ende. Check-out in diesem Zusammenhang Frage, wenn Sie verwirrt sind über Prä-Inkrement und post-Inkrement-Operatoren.InformationsquelleAutor greatwolf
Ich tun würde:
Entspricht der for-Schleife vorgeschlagen, durch greatwolf. Es ist eine persönliche Wahl.
Vorsichtig sein, mit beiden Beispiele, die Sie testen, die aktuelle position und dann erhöhen Sie. Sie sind daher mit dem nächsten Charakter!
Eine do-while-würde bedeuten: testen Sie nach dem ausführen von code, und als Folge, wird immer mindestens einmal ausgeführt die Schleife. Das könnte nützlich sein, wenn Sie wollen, betrachten Sie die
\0
Charakter zum Beispiel. Aber das wäre nicht gleichbedeutend mit Ihrem Beispiele.InformationsquelleAutor Maxime Chéramy
Vorausgesetzt, die Eingabe ist nicht null-terminiert:
für die null-terminiert Fall:
aber in der Regel ist dies so gut wie Sie bekommen können. Mit
std::vector
oderstd::string
kann damit sauberer und eleganter Optionen obwohl.nicht alles ist ein string. dies kann ein Vektor von zahlen, oder eine Art von Tabelle, und in diesen Fällen null ist nur ein weiterer Wert
Ich habe nicht gelernt Vektoren noch nicht, aber gut im Hinterkopf behalten, danke!
InformationsquelleAutor perreal