问题描述:
判断一个字符串是否为回文字符串。
程序分析:
回文字符串:
(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