Einfache String Frage
-
* strlen hat nur selten was in schleifenkoepfen verloren
-
warum das?
-
Warum was?
Greetz, Swordfish
-
bezog sich auf c.rackwitz aussage
* strlen hat nur selten was in schleifenkoepfen verloren
-
btw:
wir sind hier doch im ansi c forum....
for( size_t i = 0; i < src_length; ++i )
du darfst doch nicht einfach in einer schleife eine variable definieren...
-
#include <stdio.h> #include <string.h> int main() { char str[6] = "Hallo\0"; int i; printf("original-string: %s\n", str); printf("letzten 3 zeichen: "); for(i = (strlen(str) - 3); i <= strlen(str); i++) putc(str[i], stdout); printf("\n"); getchar(); return 0; }
warum darf ein strlen denn nicht im schleifenopf stehen? ist doch wunderbar geloest..
-
Moh schrieb:
wir sind hier doch im ansi c forum....
Swordfish schrieb:
for( size_t i = 0; i < src_length; ++i )
du darfst doch nicht einfach in einer Schleife eine Variable definieren...
Ist das durch C99 nicht schon erlaubt!?
Moh schrieb:
warum darf ein strlen denn nicht im schleifenopf stehen? ist doch wunderbar geloest..
Darf schon, nur wird bei deiner "perfekten Lösung" strlen( str ) bei jedem Schleifendurchlauf ausgewertet, was unnötig ist, da sich die Länge von str nicht ändern kann.
Greetz, Swordfish
-
zu ersterem: kann ich nicht sagen
zum zweitem: man kann die laenge ja auch schon vorher ermitteln und dann den wert zuweisen oder vergleichen... das ist ja nicht das problem
-
Arrrgl...
Das ist doch genau das, was c.rackwitz mit
c.rackwitz schrieb:
strlen hat nur selten was in schleifenkoepfen verloren.
bekritelt hat, denn dann steht strlen( ) nicht mehr im Schleifenkopf.
Greetz, Swordfish
-
aber ich hab im anfangspost doch gar nichts vom schleifenkopf geschrieben...
-
du hast im 2. Reply in diesem Thread geschrieben:
Moh schrieb:
Die Länge des Strings via strlen(); ermitteln, anschliessend in einer for-Schleife ab der gewünschten Positon die Zeichen kopieren und die Länge des Strings als Abbruchbedingung nehmen...
c.rackwitz will wahrscheinlich daraus gelesen haben, dass du strlen( ) im Schleifenkopf verwenden willst, was du jetzt nachträglich mit
Moh schrieb:
for( i = ( strlen( str ) - 3 ); i <= strlen( str ); i++ ) putc(str[i], stdout);
bestätigt hast.
Greetz, Swordfish
-
ja ich hab da "strlen" und "for-schleife" gelesen und mir gedacht, da gibst du besser schon mal einen tipp ab, bevor noch jemand "Shlemiel the painter" algos fabriziert.
-
http://www.joelonsoftware.com/articles/fog0000000319.html schrieb:
Shlemiel gets a job as a street painter, painting the dotted lines down the middle of the road. On the first day he takes a can of paint out to the road and finishes 300 yards of the road. "That's pretty good!" says his boss, "you're a fast worker!" and pays him a kopeck.
The next day Shlemiel only gets 150 yards done. "Well, that's not nearly as good as yesterday, but you're still a fast worker. 150 yards is respectable," and pays him a kopeck.
The next day Shlemiel paints 30 yards of the road. "Only 30!" shouts his boss. "That's unacceptable! On the first day you did ten times that much work! What's going on?"
"I can't help it," says Shlemiel. "Every day I get farther and farther away from the paint can!"*lol*
Greetz, Swordfish
-
oh mann, da haben wir uns ja falsch verstanden wo man sich nur falsch verstehen kann...
ich meinte eigentlich von anfang an dass man das strlen() ausserhalb des schleifenkopfes aufruft.
dann sagt c.rackwitz, dass strlen()s meistens nichts in schleifenkoefpen zu suchen haben.
daraufhin habe ich mich gewundert und dachte, dass soetwas laufzeitfehler produzier oder sonstiges... dann habe ich es ausprobiert und den quelltext geposted und wollte wissen warum das denn nicht geht...alles gruendlich in die hose gegangen....
btw: cooler text
-
Swordfish schrieb:
size_t num_of_char( const char *src, char a ) { size_t src_length = strlen( src ); size_t num = 0; for( size_t i = 0; i < src_length; ++i ) if( src[ i ] == a ) ++num; return num; }
strlen hin oder her. für so'ne funktion braucht man's ja gar nicht.
size_t num_of_char (char *src, char a) { size_t num = 0; while (*src) if (*src++ == a) num++; return num; }
-
@net: Tja, das ist mir im Nachhinein auch irgendwann aufgefallen...
Greetz, Swordfish
-
Danke für Eure Antworten und Grundsatzdiskussion