Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi leutz!

Hab da wieder mal ein kleines Problemchen!

Will versuchen einen String umzudrehen!Hier mal dier Quellcode!Ist nicht lang!!!!!!

----------------------------------------------------------------------------------------------------------

Die Main:

#include<stdio.h>

#include<stdlib.h>

#include "reversstring.h"

int main (void)

{

char string[5]="Jens";

char *pointer=string; //ZEIGER//

reversstring(pointer);

//puts(string);

getchar();

}

--------------------------------------------------------------------------------------------------------

Die Funktion:

char reversstring(char *string)

{

int i,j=0;

char tausche[5]=" ";

for(i=5;i<=0;i--)

{

tausche[j] = *(string+(i));

j++;

}

*(string)=tausche;

for(j=0;j<5;j++)

{

printf("%c",*(string+j));

}

}

---------------------------------------------------------------------------------------------------------

Vielleicht kann mir jemand den Fehler sagen!Ich komm einfach nicht drauf!

Geschrieben
Original geschrieben von Master Z

for(i=5;i<=0;i--)

ehh kann ja sein dass ich falsch liege, aber er soll die if anweisung ausführen, solange wie i kleiner gleich 0 ist?

demnach würde er die schleife nicht einmal betreten...

CMIIW

Geschrieben

Das war ja auch falsch du hast schon recht!

Das ist das richtige:

MAIN.

------------------------------------------------------------------------------------------------------

#include<stdio.h>

#include<stdlib.h>

#include "reversstring.h"

int main (void)

{

int i;

char string[]="JensAlbert";

char *pointer=string; //ZEIGER//

puts(pointer);

reversstring(pointer);

getchar();

}-----------------------------------------------------------------------------------------------------

Funktion:

#include<string.h>

char reversstring(char *string)

{

int x,i,j=0,a;

char tausche[strlen(string)];

for(i=strlen(string);i>-1;i--)

{

printf("%s",string);

printf("i=%d,j=%d\n\n",i,j);

tausche[j]=*(string+i);

j++;

}

for(a=0;a<=strlen(string);a++)

{

puts(tausche);

printf("%d",a);

}

sO DER LA

Geschrieben

Das war ja auch falsch du hast schon recht!

Das ist das richtige:

MAIN.

------------------------------------------------------------------------------------------------------

#include<stdio.h>

#include<stdlib.h>

#include "reversstring.h"

int main (void)

{

int i;

char string[]="JensAlbert";

char *pointer=string; //ZEIGER//

puts(pointer);

reversstring(pointer);

getchar();

}-----------------------------------------------------------------------------------------------------

Funktion:

#include<string.h>

char reversstring(char *string)

{

int x,i,j=0,a;

char tausche[strlen(string)];

for(i=strlen(string);i>-1;i--)

{

printf("%s",string);

printf("i=%d,j=%d\n\n",i,j);

tausche[j]=*(string+i);

j++;

}

for(a=0;a<=strlen(string);a++)

{

puts(tausche);

printf("%d",a);

}

sO DER LA

Geschrieben

Hi!

Also:

1. Wenn du schon reines C verwenden willst (so siehts jedenfalls aus), dann darfst du IMHO in der Funktion char tausche[] nicht mit einer nicht-konstanten Große initialisieren.

2. in der Rückwärtszählschleife muß i mit strlen(string) - 1 initialisiert werden.

3. und hier liegt wohl dann auch der Fehler: der getauschte String, also "tausche" muss am Ende mit \0 abgeschlossen werden. Im Mom schreibst du das \0 wohl eher an den Anfang (wegen Punkt 2) und am Ende ist gar keins mehr.

4. Ist mir deine Zeiger-Arithmetik etwas zu unstringent. Ich würde der Übersichtlichkeit halber nur den Index-Zugriff mit [] verwenden, oder, wenns sein muss, nur die Zeiger-Addition *(zeiger + x).

Das mal die erste Analyse, getestet hab ichs net.

Gruß

Benjamin

Geschrieben

Mal zu Punkt zwei warum muss ich -1 schreiben?

Hab es mal getestet und so müsste es funktionieren!

#include<string.h>

char reversstring(char *string)

{

int x,i,j=0,a;

char test[100];

//for(i=strlen(string)-1;i>-1;i--)

for(i=strlen(string)-1;i>-2;i--)

{

test[j]=*(string+i);

j++;

}

printf("%s",test);

}

Das mit i>-2 muss ich einfach schreiben sonst funzt es nicht weiß aber nicht warum vielleicht kannst du es mir ja erklären?

Geschrieben

Also Du hast in deinem String z.B. folgendes drinstehen:


T e s t d a t e n \0

0 1 2 3 4 5 6 7 8 9
Das heißt, das strlen() 9 (also 0 bis 8 zählt) zurückgibt. Das \0 am ende wird nicht gezählt. Wenn du i also auf strlen setzen würdest, würde er beim Zeichen \0 anfangen, zu kopieren. Das willst du aber nicht, da das \0-Zeichen das String-Ende-Zeichen ist und du nachher nie was sehen würdest. Also setzt du i auf strlen()-1 also auf 8. Das heißt, das *(string + i) im ersten Durchlauf "n", den letzten Buchstaben zurückgibt. Jetzt lässt du die Schleife solange laufen, solange i >=0 ist (oder in deinen Worten: i > -1). Nach der Schleife hängst du noch ein Ende-Zeichen an test dran: test[j] = '\0'; Hier nochmal der komplette Code:
char reversstring(char *string)

{

	int i,j=0;

	char test[100];



	for(i=strlen(string)-1;i>-1;i--)

	{ 

		test[j]=*(string+i);

		j++;


	}

	test[j] = '\0';


	printf("%s",test);

	return NULL;


}

Ich hoffe, das hilft dir weiter...

Benjamin

Geschrieben

Danke für deine Hilfe!Du hast wirklich alles total super erklärt so das ich es verstanden habe!Wenn ich mal wieder ein Problem habe kann ich mich dann wieder an die wenden? Ich könnte ja denn direkt in dein PM schreiben oder?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...