2017-03-20 45 views
1

基本上這個程序應該從用戶那裏得到輸入並且翻譯句子中的每個單詞。因此,如果我的「Hello World」應該打印「olleH dlroW」,但現在它會打印「dlroW olleH」。所以我的程序翻譯了整個句子,而不僅僅是特定的單詞。不確定如何處理它。我竭盡全力。如何在翻譯句子中的每個單詞時考慮空格?

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

void reverse(char *str, int start, int end) 
{ 

    char temp; 
    while (start < end) 
    { 
     if(isspace(str[start])) 
     { 
      printf("%s ", str); 
      start++; 
     } 
     else 
     { 
      temp = str[start]; 
      str[start] = str[end]; 
      str[end] = temp; 
      start++; 
      end--; 
     } 
    }  
    return; 
} 

int main() 
{ 
    char word[256]; 
    int i=0, bound; 
    printf("Enter a string\n"); 
    fgets(word, 256, stdin); 
    printf("%s", word); 

    bound = strlen(word); 
    reverse(word, i, bound-1); 
    printf("%s\n", word); 



} 
+1

@ETech:無論是在C編程語言也沒有了它的標準庫定義了' VECTOR'。如果問題是關於C++的話,那將是一個合理的方法。 – ShadowRanger

+0

赦免載體。改用char **數組。 – ETech

+0

提示:將「reverse」重命名爲「reverse_word」,並在空格處分割句子;一旦你完成了,取消積累的結果 –

回答

3

跟蹤您開始和找到空格的位置 - 兩個整數。如果你發現一個空格得到一個從'開始'(第一個字母)到'結束'(空格)的子串。顛倒子串並將其放回原始字符串並繼續。

3

修復此類

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

void reverse(char *str, int start, int end){ 
    char temp; 
    while (start < end){ 
     temp = str[start]; 
     str[start++] = str[end]; 
     str[end--] = temp; 
    }  
} 

int main(void){ 
    char word[256]; 

    printf("Enter a string\n"); 
    fgets(word, 256, stdin); 
    printf("%s", word); 

    size_t pos = 0, start, end; 
    do { 
     start = (pos += strspn(word + pos, " \t")); 
     end = start + strcspn(word + pos, " \t\n"); 
     reverse(word, start, end-1); 
     pos = end; 
    }while(start != end); 

    printf("%s\n", word); 
} 
+0

[DEMO](http://ideone.com/OzFA8I) – BLUEPIXY

2

只要改變你的反向的方法來此。我希望這有幫助。從測試

void reverse_word(char *word, int len){ 
    int i; 
    int j = strcspn(word," "); 
    int k = j; 
    int check = k/2; // for keeping track of the middle char 

    for (i = 0; i< len ; ++i) { 

     if(i == check) { 
      j = strcspn((word+k)+1," "); // get the next space if there is any 
      i = k+1; 
      j = j+k+1; 
      k = j; 
      check = i + ((j-i)/2); 

     } 

     --j; 
     char c = word[i]; 
     word[i] = word[j]; 
     word[j] = c; 
    } 

} 

結果

的 「Hello World工作」 反向--- >> 2009東海生日賀dlroW gnikrow

相關問題