2017-05-07 22 views
-5

我試圖找到與我的需求相匹配的東西,但我沒有。C中的反句C

有人可以幫助我修復我的代碼,以成功地反轉一個句子(例如:「我的名字是」,「是我的名字」)。 請不要使用函數和指針。

#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就像一輛沒有車輪的車,或沒有互聯網連接的堆棧溢出...... –

+0

你有沒有想過使用'strtok'? –

回答

0

試着從尾端讀你的句子。閱讀,直到你打空白。然後將它逐個字母複製到新字符串中。重複這個。


現在這不是一個代碼完成服務,但我給你一個大概的瞭解Here。該代碼是不完整的,所以我會建議你更加努力,自己


一件事

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

fgets更換fgets會讀「我是誰」爲{「W」,'^ h '''','m','','i','\ n','\ 0'}

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

輸出:

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

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

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

str   rev 
...................... 
Hello Foo    
    ^ ^
     j  i 
string sample a This

步驟中解析一個字 envolved

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 

上述過程將重複,直到i < l

注意:假設詞與單個字符' '分離。

+0

嗨。謝謝。我幾乎成功了,但規則是接受''和''('空間'和'選項卡'的感知)。我的代碼是否可以更改?我不能在這裏發送我的代碼\t } – Shimon