2014-01-30 210 views
-4

任務是要確保短語是可以反過來或反過來(沒有空間' ')。垃圾,而不是字符串顯示

所以我明白了這一點,並提出了一些代碼。但是當我製造

printf("%s", str_1) 

我發現了很多相同的俄羅斯字母。

比如我輸入的是:'123「321」,但顯示的垃圾

str_1[i]將是像123321,然後檢查第一個和最後等成員。

之後,我添加了如果條件if(str[i] != 'М')現在一切都很好。

請告訴我我做錯了什麼,以及"M"是怎麼回事。

我希望我的問題很清楚。

#include "stdio.h" 
    #include "locale.h" 
    int main(){ 


    char str[100]; 
    char str_1[100]; 
    int i, j, k, l; 
    j = 0; 
    l = 0; 

    fgets(str, 100, stdin); //we got array 

    //how many chars before '\0' 
     for(i = 0; i < 100; i++) 
     { 
      if(str[i] != ' ' && str[i] != '\n' && str[i] != 'М') 
      { 
       str_1[j] = str[i]; //made new array without spaces between words or whatever 
       j++; 
      } 

     } 

     j--; 

     for(k = 0; k < j; k++) 
      { 
       if(str_1[k] == str_1[j - 1 - k]) 
        { 
         l++; 
        } 
      } 
     if(l == k) 
      { 
       printf(";) YES! good job!\n"); 
      } 
     else 
      { 
       printf(";) NOT! I'm sorry!\n"); 
      } 
     return 0; 
    } 

回答

1

看起來,您跳過了字符串的末尾,因爲您從不檢查它結束的位置。

至少,這是我的懷疑;我不確定這是否是正確的原因。

你應該檢查str[i] == '\0',然後打破整個循環。

依我之見,你甚至在

//how many chars before '\0' 

作出這方面的考慮,但不包括它的代碼。

一個

for(i = 0; i < 100 && str[i] != '\0'; i++) 

如果省略j--後應該做的伎倆。

+0

謝謝你,是的,我錯過了這一個,所以現在它的工作原理應該是這樣),我得到了j--在 –

+1

@ wm.p1us之後沒有,你應該省略它,因爲你不復制'\ 0 '字節。 – glglgl