Frage von Siarzewski, 34

Programmiersprache C Kann mir da jmd bitte weiterhelfen?

Es geht um die Programmiersprache C und zwar, um die folgende Zeile:

   while (w1[i] !='\0') {

   count1[w1[i]]++;

   i++; }

Kann mir jmd vor allem die erste Zeile erklären und was genau das ungleich '\0' bedeutet?

vielen Dank im voraus.

Siarzewski

Antwort
von PWolff, 29

'\0' ist das NULL-Zeichen, das Zeichen mit dem Code 0. Es ist das Zeichen eines C-Strings, das das Ende des Strings markiert; dies ist ein typisches Muster einer C-Schleife zum zeichenweisen Durchlaufen eines Strings.

Als nächstes folgt aller Wahrscheinlichkeit nach die Frage, was dann die zweite Zeile bedeutet. Antwort: C unterscheidet nicht zwischen dem Code eines Zeichens und dem Zeichen selbst - beides ist dieselbe Zahl. Ob das Zeichen oder sein Code gemeint ist, ergibt sich aus dem jeweiligen Kontext.

Kommentar von Siarzewski ,

ok Danke für deine Antwort. Aber was genau soll ich mir unter ungleich '\0' verstehen?

Kommentar von TeeTier ,

Ein sog. C-String wird mit einem '\0'-Zeichen beendet, welches tatsächlich den Wert Null hat. Deshalb nennt man so etwas auch Nullterminierte-Strings.

In der While-Schleife wird einfach überprüft, ob das aktuelle Zeichen einen Wert ungleich Null hat; also ob das Ende der Zeichenkette erreicht ist, oder nicht.

Kommentar von PWolff ,

Das Zeichen in w1 mit dem Index i ist nicht gleich dem Ende-Zeichen.

(D. h. das String ist noch nicht zuende)

Kommentar von Siarzewski ,

aaa alles klar. Danke Dir! :)

Expertenantwort
von TeeTier, Community-Experte für programmieren, 32

Das kannst die Häufigkeit von einzelnen Zeichen auch kürzer zählen:

while (w1[i]) {
++count[w1[i++]];
}

Ansonsten verweise ich mal auf die Antwort von PWolff. :)

Kommentar von PWolff ,

Arithmetische Konditionen können eine sehr zeitkritische Schleife beschleunigen, sind aber in allen anderen Fällen m. E. schlechter Stil. In Sprachen, in denen bool ein streng umrissener Typ ist, sind solche Konstrukte auch unmöglich. Übrigens optimiert ein nicht allzu schlechter Compiler solche Abfragen selbständig.

(Andererseits sind manche Gruppen von Programmierern notorisch schreibfaul - manches im Entwurf von C deutet darauf hin, dass die Erfinder dieser Sprache dazu gehörten, arithmetische Konditionen z. B.)

Kommentar von TeeTier ,

Meine "Verkürzung" ist bestimmt für Einsteiger schwerer verständlich, aber ich denke, dass erfahrene C-Programmierer besser damit klar kommen. Es ist einfach kürzer, und man hat weniger zu lesen. Und bei so einem kurzen Schnipsel, sieht man auch auf den ersten Blick, was der Code tun soll. :)

Außerdem gehe ich mal davon aus, dass so ziemlich jeder Compiler sowohl meinen, als auch den Code des Fragenstellers in den selben Maschinencode übersetzen wird.

Die Verkürzung ist keine Optimierung für den Build-Prozess, sondern für den Entwickler. Aber da scheiden sich wohl die Geister. :)

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten