回文计划(不工作)我不知道为什么

时间:2017-10-06 21:41:10

标签: c

我尝试制作一个小程序,可以检测你是否输入了回文但由于某种原因,它只是循环
ps我是初学者

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

int main(void)
{
char arr[100], arr1[100];
int i;

printf("type in a string\n\n");
gets(arr);

strrev(arr) == arr1;

for (i=0; arr==arr1; i++)
{
    printf("%c is a palindrome\n", arr);
}
for (i=0; arr!=arr1; i++)
{
    printf("%c is not a palindrome\n", arr);
}
return 0;
}

2 个答案:

答案 0 :(得分:0)

arrarr1分别是两个数组的基地址,这将是不同的。一个简单的代码在这里

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

int main(void)
{
char arr[100], arr1[100];
int i;

printf("type in a string\n\n");
gets(arr);
int len=strlen(arr);
strcpy(arr1,arr);
strrev(arr);
for(i=0;i<len;i++){
   if(arr1[i]!=arr[i]){
       printf("Not palindrome");
       return 1;
   }
}
printf("Palindrome");

return 0;
}

答案 1 :(得分:0)

使用fgets代替获取。
第一个字符可以与最后一个字符进行比较。然后将索引移向中心以进行后续比较。

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

int main(void) {
    char arr[100] = "";
    int first = 0;
    int last = 0;

    printf ( "type in a string\n\n");
    if ( !fgets ( arr, sizeof arr, stdin)) {
        printf ( "fgets problem\n");
        return 0;
    }
    arr[strcspn ( arr, "\n")] = '\0';//remove newline

    for ( first = 0, last = strlen ( arr) - 1; first <= last; first++, last--) {
        if ( arr[first] != arr[last]) {
            printf("%s is not a palindrome\n", arr);
            return 0;
        }
    }

    printf ( "%s is a palindrome\n", arr);
    return 0;
}