2017-05-07 5 views
-5

私のニーズに合ったものを見つけようとしましたが、私はそうしませんでした。Cの逆文

誰かが、文を正しく取り消すためのコードを修正するのに役立つかもしれません(「my name is」から「is name my」など)。 関数とポインタを使用しないでください。

#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

ポインタなしの車は車輪なしの車、インターネット接続なしのスタックオーバーフローのようです... –

+0

あなたは 'strtok'を使って考えたことはありますか? –

答えて

0

尾端から文章を読もうとします。あなたが空白になるまで読む。その後、手紙を新しい文字列にコピーします。これを繰り返します。


さて、これはコード補完サービスではありませんが、私はあなたの目安Hereを与えています。このコードは、私はあなたが難しく、自分


もう一つ

読みますscanf("%[^\n]s", ...)

fgetsfgetsを交換してください「誰だ私」として{「W」、 'Hを試すことをお勧め不完全です

0

' 'が見つかるまで、文字列のスキャンを開始します。このインデックスから次回に開始する位置を保存します。今度はこの位置から別の' 'が見つかるか、文字列が終了して新しい逆配列に文字を割り当てたままにします。元の文字列の先頭に達するまでこれらの手順を繰り返します。

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++; 
} 

出力:単一の単語を解析するにenvolved string sample a This

ステップ:

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 
上記プロセス3210

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 

i < l

まで繰り返される:ワードが単一' 'チャーと分離されていると仮定。

+0

こんにちは。ありがとう。私はほとんど罵倒しましたが、規則は ''と ''(知覚のための 'スペース'と 'タブ')を受け入れることです。私のコードはそれに対して変更可能ですか? \t \t(私のここで私のコードを送ることはできません)\t } – Shimon