sätze umkehren ohne strrev wie geht das?
-
was haltet ihr davon? ich weiß - malloc is net ideal... bin halt noch anfänger...
#include <stdio.h> #include <string.h> #include <stdlib.h> char* string_reverse(char* string); int main(void) { printf("%s\n\n", string_reverse("dreh mich um")); return 0; } char* string_reverse(char* string) { int i; char* reversed = (char*)malloc(sizeof(char)*(strlen(string)+1)); char* tmp = (char*)malloc(sizeof(char)*2); for ( i=strlen(string); i>=0; i-- ) { strcat(reversed, strncpy(tmp, &string[i], 1)); } return reversed; }
-
hab auch mal was gemacht
#include <stdio.h> #include <string.h> int main(){ char cZeichenkette[256]; strcpy(cZeichenkette, ""); int iStringLaenge = strlen(cZeichenkette); printf("Bitte geben sie einen Satz ein."); //weiss noch nicht was für eine scanf funktion einsetzen for(int i = 1; i <= iStringLaenge; i++) { printf("%c ", cZeichenkette[iStringLaenge - i]); }; // for printf("\n"); getchar (); return 0; }
-
37337 is auch noch Anfänger!
Und ich glaub der hat noch gar keine Ahnung von Pointern!?
Oder irre ich mich?mfg hohesC
@37337 nimm doch gets(satz); oder fgets(satz,100,stdin);
-
von pointer hab ich soviel ahnung wie von der chemischen formel von putzlappen. ich habe erst gerade begonnen und von pointer weiss ich überhaupt nichts.
-
Dacht ich doch dann nützen dir die Codes mit Pointern gar nichts!!!
Also würd ich sagen Lösungen ohne Pointer!?
(er soll es ja verstehen)mfg hohesC
-
ja wär noch nützlich
-
ist wahrscheinlich schwerer ohne pointer oder?
-
Nein ist es nicht hier NOCHMAL die lösung ohne Pointer:
#include <stdio.h> #include <string.h> int main() { int x; char satz[100]; printf("\nBitte einen Satz eingeben\n>"); gets(satz); printf("\nUmgedreht sieht ihr satz so aus: "); for(x=strlen(satz)-1;x>-1;x--) { printf("%c",satz[x]); } getchar(); return 0; }
-
DANKE hohes C du bis WIRKLICH hilfsbereit
-
Hum. Ich denke, die sinnvollste Lösung wäre was in der Art:
#include <stdio.h> char *strrev(char *buf, size_t buflen, char const *src) { size_t src_ix = strlen(src) - 1; size_t dst_ix = 0; while(dst_ix < buflen - 1) buf[dst_ix++] = src[src_ix--]; buf[dst_ix] = 0; return buf; } int main(void) { char buf[20]; puts(strrev(buf, 20, "Hello, World!")); return 0; }
-
Hum.
1.das funktioniert nicht weil du string.h includieren musst!
2.lies dir vorher das was schon gepostet wurde durch!mfg hohesC
-
Es geht mir grad auch ein bisschen darum, ne Idee für vernünftiges Design zu vermitteln - insbesondere mit dem Stack/Heap-Kram haben ja anfangs viele Probleme (besonders, weils böse Heisenbugs liefert, die schwer zu debuggen sind).
Was die string.h angeht, ja, ok. Aber zumindest hab ich nicht gets benutzt... *schauder*
-
Was haltet ihr von
#include <stdio.h> void rueckwaerts(char * text, int laenge) { static int maxlen=laenge; if (laenge>1) rueckwaerts(text,laenge-1); printf("%c",text[maxlen-laenge]); } int main() { rueckwaerts("Hallo Welt",10); }
EDIT: Habs noch nich so drauf mit dem Forum hier
-
0xdeadbeef schrieb:
Es geht mir grad auch ein bisschen darum, ne Idee für vernünftiges Design zu vermitteln - insbesondere mit dem Stack/Heap-Kram haben ja anfangs viele Probleme (besonders, weils böse Heisenbugs liefert, die schwer zu debuggen sind).
Was die string.h angeht, ja, ok. Aber zumindest hab ich nicht gets benutzt... *schauder*
Naja Heisengeschwätz! :p Ich würd mal sagen Compiler abhängig!
string.h vergessen das nenn ich nen fatalen bug! :p
Wie nennt man die Art von bugs eigentlichmfg hohesC
(zum glück gibt es spaß
)
-
Heisenbugs sind idR alles andere als compilerabhängig. Meistens ist der Grund einfach Schlampigkeit - wenn der Programmierer seine Buffer nicht checkt (gets, gets...waaah!) zum Beispiel.
string.h zu vergessen...naja, C99 kauft es einem nicht mal mehr ab, und C89 deklariert implizit eine Funktion int strlen(char const*), was erst bei Strings mit einer Länge > INT_MAX einen Unterschied macht...und selbst dann genau die selben Fehler liefert wie ein Vergleich des Rückgabewerts mit einem int i an Stelle eines size_t i.
-
unter was hat du nochmal gegoogelt?
-
mata schrieb:
Was haltet ihr von
#include <stdio.h> void rueckwaerts(char * text, int laenge) { static int maxlen=laenge; if (laenge>1) rueckwaerts(text,laenge-1); printf("%c",text[maxlen-laenge]); } int main() { rueckwaerts("Hallo Welt",10); }
EDIT: Habs noch nich so drauf mit dem Forum hier
Hier stimmt noch net so was....... das Programm funktioniert noch nicht, wie es soll !
So habs eben nochmals länger getestet und da bekomm ich immer nur das "H" von Hallo Welt zurück. Daher kann also, etwas an dem Quellcode nicht stimmen. Der Fehler liegt meiner Meinung nach in der Ausgabe und ist in kürzester Zeit behoben !
-
So die Version geht !:
#include <stdio.h> void rueckwaerts(char * text, int laenge); int main() { rueckwaerts("Hallo Welt",10); return 0; } void rueckwaerts(char * text, int laenge) { static int maxlen; maxlen=laenge; if (laenge>1) { rueckwaerts(text,laenge-1); } /* Die Ausgabe musste nochmal extra bearbeitet werden, damit das Endresultat und die Funktion des Programmes auch richtig funktionieren. */ printf("%c",text[maxlen-laenge+9]); }
-
hmmm iz ja nu geklärt.
Aber warum weiss ich nich dasses strrev gibt ?