C / Pointer: Wie kann ich einen eingegebenen String umdrehen?
Hi,
ich habe hier ein Programm, dass einen eingegebenen String verdrehen soll (Hallo --> ollaH). Nun komme ich nicht mehr weiter bei meiner for-Schleife. Also da wo der neue "String" "gefüllt" wird.
Mein Code:
char* string_converter(char *your_string)
{
int n = 0;
int i;
char *new_string;
while (*(your_string + n)) {
++n;
}
new_string = (char *) malloc(n + 1);
for (i = 0; i <= n; ++i) {
*(new_string + i) = *(your_string + n - i + 1);
}
return new_string;
}
1 Antwort
Du könntest mit strlen arbeiten
siehe
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char* string_converter(char *your_string){
int n = 0;
int i;
char *new_string;
while (*(your_string + n)){
++n;
}
new_string = malloc(n + 1);
for (i = 0; i <= n; ++i){
*(new_string + i) = *(your_string+strlen(your_string)-i-1);
}
return new_string;
}
int main()
{
printf("%s",string_converter("Hallo"));
return 0;
}
Warte mal. Noch besser wäre
your_string+n-i-1
Dann musst du string.h auch nicht einbinden.
Nun zur erklärung
du hast ja an der Aderesse von your_string den ersten Buchstaben von Hallo stehen.
Also
*(your_string+0) => H
*(your_string+1) => a
usw.
und an your_string+n denn Nullterminierer.
Gehst du jetzt also in den ersten Schleifendurchlauf mit i = 0
ergibt sich your_string+n-0-1, also 1 Zeichen hinter dem Nullterminierer, was dir dir das o von Hallo gibt.
so hatte ich es in meinem code (oben) auch aber funktioniert so irgendwie nicht. also ergibt eine falsche ausgabe
*(your_string+strlen(your_string)-i-1) hiermit geht es, aber warum nicht mit meiner Variante?
n hab ich ja schon al stellen verrechnet müsste doch genauso gehen
Ich glaube das problem ist bei dir steht +n-i+1 und bei mir +n-i-1
Erstmal vielen Dank für die schnelle Antwort. Ich verstehe diese Zeile noch nicht ganz: your_string+strlen(your_string)-i-1