Einzelne Wörter umdrehen



  • Also die Varianten mit den Funktionen klappen super also erstmal danke 🙂

    Nur leider darf ich keine Funktionen nehmen, da wir die eig. noch nicht hatten.
    Aus diesem Grund hab ich meinem Code ein Paar Kontrollausgaben beigelegt.

    int main()
    {
    	char text1[80];
    	char text2[80];
    	int i,j,k,l;
    	k,l,i,j = 0;
    	fgets(text1,80,stdin);
    	do
    	{
    		do
    		{
    			k = i;
    			i++;
    			printf("a");
    		}while(text1[k]!='\x20' && text1[k]!='\0');
    
    		for(j=k-1 ; j>=l ; j--)
    		{
    			text2[(k-1)-j]=text1[j];
    			printf("b");
    		}
    		printf("c");
    		l = i;
    		j = 0;
    		if (text1[k]=='\x20') { text2[k]=' ';}
    	}while(text1[k]!='\0');
    	text2[k]='\0';
    	printf("%s",text2);
    	getch();
    	return 0;
    }
    

    Wenn ich jetzt einen 3-Stelligen String eingebe wie z.B.: "asd"
    So gibt er mir aus: aaaac
    Sprich er überspringt die For-Schleife 😕

    Vielleicht bin ich blind aber ich versteh einfach nicht warum das passiert ich meine die Bedingung ist ja wahr



  • @seldon: Danke, diese Funktionen kannte ich nicht. Dein rekursives revese finde ich sehr elegant. 👍

    @luggas: Wenn du weißt, wie man Funktionen benutzt, kannst du sie ja auch verwenden. Dein Lehrer wird sich bestimmt auch freuen, wenn du mehr weißt als die anderen.



  • 314159265358979 schrieb:

    @seldon: Danke, diese Funktionen kannte ich nicht. Dein rekursives revese finde ich sehr elegant. 👍

    Du leidest an Geschmacksverirrung.



  • @PI ja klar freut ihn das nur es muss ja auch ohne funktionen gehen^^



  • Schreib doch mehr in deine Kontrollausgabe:
    [url]printf("a> i: %d, j: %d, k: %d, l: %d | Zeichen: %c (%d)\n", i, j, k, l, text1[k], text1[k]);[/url]
    dann siehst du wo der Fehler steckt.



  • volkard schrieb:

    Du leidest an Geschmacksverirrung.

    Das hätte wohl besser in meinen Spamthread im Mathe-Physik-Bereich gepasst. Dort hätte ich es noch irgendwie nachvollziehen können. Hier leider nicht.

    luggas schrieb:

    @PI ja klar freut ihn das nur es muss ja auch ohne funktionen gehen^^

    Mach dir doch das Leben nicht unnötig schwer.



  • das is ne gute idee mal schaun was raus kommt



  • Das sollten c++ Tags sein 🙄

    Beachte auch die Warnungen vom Compiler.



  • Naja, die Tail-Rekursion dürfte ein Compiler schon rausoptimieren können. Aber wenn es eher volkards Geschmack entspricht:

    void reverse(char *first, char *last) {
      if(last <= first) return;
    
      for(--last; first < last; ++first, --last) {
        swap(first, last);
      }
    }
    

    Es läuft am Ende auf das selbe hinaus.



  • Das mit den zusätzlichen Kontrollausgaben war ne geile Idee danke so komm ans Ziel 👍



  • Nicht initialisierte Variablen wegen k,l,i,j = 0;



  • jo hab ich auch schon bemerkt jetzt funktioniert es 🙂 Danke


Anmelden zum Antworten