编写程序,用来读一条消息,然后检查这条消息是否是回文(信息中从左到右的字母和从右到左的字母完全一样,忽略所有不是字母的字符).例如:
enter a message:He lived as a devil,eh?
palindrome
enter a message:Madam,I am Adam.
not a palindrome
下面是我写的程序,不知道哪里错了(检查了很多次,还是看不出),请高手帮忙看一下,谢谢了!!!
#include<stdio.h>
#include<ctype.h>
#define N 20
main()
{
int i,j;
char a[N];
printf(“enter a message:\n”);
for(i=0;i<N;i++)
if(a[i]=getchar()!=’\n’)
a[i]=toupper(a[i]);
else
break;
for(i=0,j=N;i<=j;i++,j–)
{
while(a[i]<’A'||a[i]>’Z')
i++;
while(a[j]<’A'||a[j]>’Z')
j–;
if(a[i]!=a[j])
break;
}
if(i>j)
printf(“palindrome\n”);
else
printf(“not a palindrome\n”);
return 0;
}
>> 本文固定链接: http://www.vcgood.com/archives/2594
>> 转载请注明: sheng409224646 2008年08月06日 于 C语言帝国 发表
应该是你的测试数据出错误了。
正确的应该是:
Madam,I’m Adam.
是I’m,不应该是I am。
测试数据没错,那句是用来说明所测试的数据不是回文时程序就显示
not a palindrome
现在问题是无论我输入什么数据都显示
palindrome
这行程序错误:
if(a[i]=getchar()!=’\n’)
应该改成:
if((a[i]=getchar())!=’\n’)
改过之后程序就正确了。
原因:
if(a[i]=getchar()!=’\n’)中运算符!=优先级要比运算符=优先级高,所以程序先判断getchar()!=’\n’,成立的话为真,返回一个值给a[i],a[i]=1 ‘□(□代表一个特殊符号,因为无法复制所以用□代替),不成立的话为假,也返回一个值给a[i],a[i]=0 ”。(以上返回值经过测试)
if((a[i]=getchar())!=’\n’)中运算符()优先级要大于运算符!=的优先级,所以先执行a[i]=getchar,然后再进行判断。
很多谢whos的帮忙,你帮我指出了一个最主要的错误,谢谢!!
这里我还要说的一个问题:就是我在程序中定义的数组的长度太短了,才20个字节,而我的测试数据He lived as a devil,eh?就已经超过20个字节了,如果不把数组改长些(在把a[i]=getchar()加上括号变成(a[i]=getchar())的前提下),这条数据怎么测结果都是not a palindrome
呵呵,这个倒是没怎么注意。
我测试时是随便输入一个字符串,一般都五六个字符,所以就假设输入的字符串是符合条件的。所以这句没怎么分析。
倒是我疏忽了~~