问题描述:
判断一个字符串是否为回文字符串。
程序分析:
回文字符串:
(1)是一种特殊的字符串,有着不一样的特点。整个字符串中的每个元素的首尾是相同的,并且内容关于中间“对称”。
(2)写程序的时候,写一个函数,并且用指针实现判断功能,最后再调用这个函数。
(3)在写这个函数的时候,我在主函数里传入一个字符串可以用scanf也可以用gets函数。这个时候如果我想要连续判断字符串是否为回文字符串的时候,我写了一个while循环,这个时候,如果我运用gets这个函数来传入我要判断的字符串时,会出现问题,,只有第一次输入的时候没问题,其他时候都是没输入的时候已经判断。
(4)我对以上出现的问题,做出一个解释。gets函数可以把敲入的回车键当做‘\0‘来读取,我们每次想要输入一个1想继续输入一个字符串判断的时候,相当于输入‘\0‘.所以输出判断的结果。
代码如下:
/*******************判断一个字符串是否是回文字符串********************/ #include<stdio.h> #include<string.h> #define LENTH 100 int IS_palindromic_str(char arr[]) //定义判断回文字符串的函数 { char *left = arr; //定义指针left指向数组的第一个元素 char *right; //定义指针right while(*arr !='\0') //结束条件是访问到字符串中的'\0' { arr++; } right = arr - 1; while(left <= right) { if(*left == *right) //判断是否符合回文字符串的条件 { left ++; right--; } else return 0; //注意这时候先返回0 } return 1; } int main() { char str[100] ; int i = 1; while(i) { printf("Please input a string:\n"); gets(str); // scanf("%s",str); if((IS_palindromic_str(str)== 1)) printf("str is a palindromic string\n"); else printf("str is not a palindromic string\n"); printf("continue:1,break:0\n"); scanf("%d",&i); // fflush(stdin); //如果用gets函数传入str则要使用一个输入内存清空函数 } return 0; }
原文地址:http://blog.csdn.net/live_wyq/article/details/45289021