Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » String

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.09.2007, 23:25 Uhr
~blurry333
Gast


Es geht um eine for-Schleife und um einen String der ausgegeben werden soll.
for(i=0;str[i]!=0;i++)

Nur hat mir mein Lehrer gesagt statt str[i]!=0 könnte ich auch
einfach str[i] schreiben. Das reicht vollkommen aus.
Er hat auch recht. Aber wieso ??

Danke .
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.09.2007, 23:51 Uhr
xXx
Devil


Hmm weil 0 == false ist ^^ und 1 == true ...

C++:
const char* arr[] = "Das ist ein Test";
std::assert(arr[17] == '\0');
std::assert(arr[17] == 0);
std::assert(arr[17] == false);
std::assert(!arr[17]);
sollte alles gehen ^^ \0 ist das Terminierungszeichen eines C-Strings und hat den Wert 0. 0 entspricht in der Informatik false. Wenn str an der Stelle x dann gleich 0, '\0' oder false ist, wird deine Schleifenbedingung nicht mehr wahr sein ... und damit verlässt er die Schleife.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.09.2007, 07:16 Uhr
~blurry333
Gast


Danke !!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.09.2007, 08:20 Uhr
ao

(Operator)


Dass das geht und von vielen gemacht wird, heißt aber noch lange nicht, dass es auch "sauberer Stil" ist. Wie man an Blurrys Frage sieht, ist es zumindest verwirrend.

Wenn ein Lehrer so kommentarlos den Tipp gibt, statt str[i]!=0 doch str[i] zu schreiben, ohne mal ein Wort über den Sinn und Zweck von Datentypen zu verlieren, finde ich das nicht in Ordnung. Es gibt nämlich auch gute Gründe, den Vergleich !=0 auszuschreiben (Lesbarkeit des Codes) und in anderen Sprachen bestehen die Compiler auch darauf.

Dass man das !=0 aus Performance-Gründen weglässt, halte ich für ein Märchen, denn der Compiler muss auf jeden Fall Code erzeugen, der auf einen Vergleich mit 0 hinausläuft, ob der nun hingeschrieben ist oder nicht. Vielleicht gibt es exotische oder alte Plattformen, auf denen das tatsächlich einen Unterschied macht, aber das zur Grundlage im heutigen Info-Unterricht zu machen ist wohl nicht ganz angemessen.

Außerdem sollte man die Optimierung besser dem Optimizer überlassen und sich drauf konzentrieren, sein Programm so klar wie möglich zu formulieren.

Gruß,
ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.09.2007, 14:15 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Also ich finde das sehr klar wenn man nicht extra noch !=0 oder ähnliches schreibt, aber ist vielleicht auch geschmackssache.

Ich schreibe ja auch nicht

C++:
bool b = true;
if (b == true)
...


sondern

C++:
if (b)
...



Allerdings hast du Recht ao das ein Lehrer das schon näher erläutern sollte.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.09.2007, 21:46 Uhr
Pablo
Supertux
(Operator)


@guybrush: es geht hier nicht darum, ob es Geschmackssache ist oder nicht, sondern, ob man weiß, warum man das != 0 weglassen kann, wie im Falle des '\0' Zeichen. Der Prof/Lehrer sagt einfach, dass man if(str[i]) schreiben kann, aber das wieso wird nicht erklärt. Deswegen entsteht ja dieser Thread. Und bevor man syntaktischen Zucker wie if(str[i]) benutzt, sollte man erklären, warum man das darf.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 25.09.2007 um 21:47 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.09.2007, 21:58 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Und bevor man syntaktischen Zucker wie if(str[i]) benutzt, sollte man erklären, warum man das darf.


Ich würde nicht sagen, dass ao das als syntaktisachen Zucker bezeichnet.

Ich bin da allerdings voll und ganz der Meinung vom Guybrusch. Wirklich schwieriger ist der Code finde ich auch nicht zu lesen wenn man es weglässt. Es ist reine Gewöhnungssache...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.09.2007, 23:04 Uhr
Pablo
Supertux
(Operator)


Entweder habt ihr nicht verstanden, worum es geht oder wir reden aneinander vorbei ich denke, hier geht es nicht darum, ob der Code leserlicher wird oder nicht, sondern ob der Fragestellender auch versteht, warum man das != 0 weglassen kann. Euch gefällt es besser ohne != 0 (btw: ich hasse, wenn andere Leute Sachen wie != 0 weglassen), dann benutze es auch, aber Ihr weißt, warum man das weglassen kannst und das ist meiner Meinung nach der Unterschied, denn blurry wusste nicht, warum das weglassen kann und sein toller Lehrer hat das niemals erwähnt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 25.09.2007 um 23:06 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.09.2007, 00:41 Uhr
xXx
Devil



Zitat:
Ich schreibe ja auch nicht
C++:
bool b = true;
if (b == true) /* ... */


Ohh doch ^^ Dann habsch nen bissel mehr Farbe weil des ja für gewöhnlich gehighlightet wird
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: