2017-05-07 3 views
-5

Ich habe versucht, etwas zu finden, das zu meinen Bedürfnissen passt, aber ich tat es nicht.Reverse Satz in C

Könnte jemand mir helfen, meinen Code zu korrigieren, um einen Satz erfolgreich umzukehren (von: "mein Name ist" zu "ist mein Name" zum Beispiel). Bitte ohne Funktionen und Zeiger.

#include <stdio.h> 
#include <string.h> 

void main() { 
    int i = 0, j = 0, end, count=0, sumletters=0; 
    char str[1000], strrev[1000]; 

    fgets(str, sizeof(str), stdin);//get string from user 

    sumletters = strchr(str, '\0') - str - 1;//find the last characters in string 
    while (sumletters) { 
     end = sumletters= strchr(str, '\0') - str - 1; 
     while (str[sumletters] != ' '){ 
      //find the number letters of the last word and enter to counter 
      sumletters--; 
     } 

     for (i = 0; sumletters!=end; i++, sumletters++) { 
      //enter every leters from the last word to new string 
      strrev[i] = str[sumletters + 1]; 
      str[sumletters + 1] = '\0';//dros the leters that already copy 
     } 

    } 

    puts(str); 
    puts(strrev); 


} 
+4

C ohne Zeiger ist wie ein Auto ohne Räder, oder Stack Overflow ohne Internetverbindung ... –

+0

Haben Sie jemals daran gedacht, 'strtok' zu verwenden? –

Antwort

0

Versuchen Sie, Ihren Satz vom Ende zu lesen. Lesen Sie, bis Sie ein Leerzeichen gefunden haben. Dann kopiere es Buchstabe für Buchstabe in die neue Zeichenfolge. Wiederholen Sie dies.


Nun ist dies nicht ein Code-Completion-Service, aber ich gebe Ihnen eine grobe Vorstellung Here. Dieser Code ist unvollständig, so würde ich vorschlagen, Sie versuchen, härter selbst


Eine weitere Sache

ersetzen fgets mit scanf("%[^\n]s", ...)

fgets lesen "Wer bin ich" als { 'w', 'h ',' o ',' ',' a ',' m ',' ',' i ',' \ n ',' \ 0 '}

0

Beginnen Sie mit dem Scannen der Zeichenfolge von hinten, bis Sie eine ' ' finden, speichern Sie ihre Position, um das nächste Mal aus diesem Index zu starten. Von dieser Stelle aus gehen Sie weiter bis zu einem anderen ' ' oder die Zeichenfolge endet und weist die Zeichen dem neuen umgekehrten Array zu. Wiederholen Sie diese Schritte, bis Sie den Anfang der ursprünglichen Zeichenfolge erreicht haben.

char str[] = "This a sample string"; 
const int l = strlen(str); 
char rev[l]; 
int i = 0, j, k = l-1; 

while(i < l) { 
    j = k; // starting point is k 
    for(; str[j] != ' ' && j >= 0; j--); // moving j from right to left till ' ' found 
    k = j-1; j++; 
    for(; j < l && str[j] != ' '; j++, i++) { 
     rev[i] = str[j]; 
    } 
    if(i < l) 
     rev[i] = ' '; i++; 
} 

Output: string sample a This

envolved Schritte in einem einzigen Wortanalyse:

i = 0, k = 8, j = k;

str   rev 
...................... 
Hello Foo    
     ^ ^
     j  i 

j = 7, i = 0 // j--

str   rev 
...................... 
Hello Foo    
    ^ ^
     j  i 

j = 6, i = 0 // j--

str   rev 
...................... 
Hello Foo    
    ^ ^
     j  i 

j = 5, i = 0, k = j-1 // j--

str   rev 
...................... 
Hello Foo    
    ^ ^
    j  i 

j = 6, i = 0 // j++

str   rev 
...................... 
Hello Foo  F  
    ^ ^
     j  i 

j = 7, i = 1 // j++, i++

str   rev 
...................... 
Hello Foo  Fo  
    ^ ^
     j  i 

j = 7, i = 2 // j++, i++

str   rev 
...................... 
Hello Foo  Foo  
     ^ ^
     j  i 

j = 8, i = 3 // j++, i++

str   rev 
...................... 
hello Foo  Foo  
     ^ ^
     j  i 

Above Vorgang wiederholt sich, bis i < l

Hinweis: unter der Annahme, die Worte mit einem einzigen ' ' char getrennt sind.

+0

Hallo. Vielen Dank. Ich habe fast sucsed, aber die Regeln sind zu akzeptieren '' und '' ('Raum' und 'Tab' für Wahrnehmung). ist mein Code dafür änderbar? \t \t (ich kann nicht hier meinen Code senden) \t } – Shimon