广告公司业务员心得:用C语言求回文的问题,看看哪里出错

来源:百度文库 编辑:高校问答 时间:2024/05/11 04:47:59
如abcb和abba是回文,abcde和ababa不是回文,以下是程序

// 4.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include "stdio.h"
#include "string.h"
main()
{
int i;
int len;
int n;
char str[80];
printf ("请输入字符串:");
scanf("%s",str);
len=strlen(str);
n=(len/2)-1;
for(i=0;i<=n;i++)
{
if(str[i]!=str[len-i-1])

printf("%s:不是回文字符串\n",str);
break;
}
if(i==n) printf("%s:是回文字符串\n",str);

}

有2个错误,见程序中的注释。改了还错我就不上网了

/********* new *************/
……
for(i=0;i<=n;i++)
{
/* (1)退出(break;)是在发现两端的字符有不等的时候才发生的,所以要作为这个比较语句(if……)的字句*/
if(str[i]!=str[len-i-1])
{ printf("%s:不是回文字符串\n",str);
break;
}
}
/*(2) 当所有两端对称的字符都相同,即上面那个上面那个for循环正常结束,i 刚好不满足<=n,即 i 此时=n+1,所以检验的条件应该是 i==n+1*/
if(i==n+1) printf("%s:是回文字符串\n",str);

LZ好象搞错了吧?
正读和反读都相同的字符序列为“回文”,那么
ababa就应该是回文,
如果这样,那么你程序中没有判断字符串长度是奇偶,那么可能就错了

原因应该是因为你在for循环下的if判断句里的
printf("%s:不是回文字符串\n",str);
break;
是作为一个复合语句的应该用{}括起来。不然的话第一次循环的时候就执行了break,那肯定是不对的吧。你试试这样
for(i=0;i<=n;i++)
{
if(str[i]!=str[len-i-1])
{
printf("%s:不是回文字符串\n",str);
break;
}
}
具体我也没有编译,你试试吧