Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

String umdrehen

Empfohlene Antworten

Veröffentlicht

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!

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

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

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

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

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?

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

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?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.