2013-11-25 2 views
1

Я хочу посмотреть, является ли слово/фраза палиндром или нет. я должен использовать fgets, а не получает и т. д. ... с моим кодом работает, но с fgets это не так. кто знает почему?найти палиндром, не работает с fgets

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

int main() 
{ 

    int i,j,len; 
    char str[100]; 
    printf("Enter the string: \n"); 
    fgets(str,sizeof(str),stdin); 
    len=strlen(str); 
    for(i=0;i<=len;i++) 
     str[i]=tolower(str[i]); 

    for(i=0,j=len-1;i<j;i++,j--) { 
     while (str[i]==' ') i++; 
     while (str[j]==' ') j--; 
     if(str[i] != str[j]) { 
      printf("NO\n"); 
      return 0; 
     } 
    } 

    printf("YES\n"); 
    return 0; 
} 
+0

Прежде всего, он скомпилирован для вас? Кроме того, это: http://stackoverflow.com/questions/3285432/to-find-if-a-given-string-is-palindrome-or-is-not-palindrome?rq=1 – Radnyx

+0

Посмотрите на строку в отладчик. Затем выполните свой код. Проверьте переменные. Ответ должен быть незамедлительным. –

ответ

1

Это не работает с fgets, потому что он держит заднюю \n со строкой; gets не делает.

От documentation:

Символ новой строки делает fgets прекратить чтение, но это считается допустимым символом функцией и включены в строку скопированный на ул.

Чтобы это исправить, отрегулируйте длину, чтобы учесть заднюю \n марки: идти до конца строки и двигаться назад, пока вы не увидите не- \n характера.

+0

я вижу, спасибо! если я: len = strlen (str) -1; Это работает. мы просто даем простые работы/фразы типа: abcba, dad, anna, никогда нечетные или даже и т. д. ... , поэтому я изменил это, и он работает. спасибо;) – nickD3

Смежные вопросы