永发信息网

怎样判断输入的字符串是否为回文?

答案:2  悬赏:80  手机版
解决时间 2021-01-04 20:45
  • 提问者网友:两耳就是菩提
  • 2021-01-04 06:05
#include
#include
void main()
{
char str[20],copy[20];
char temp;
char *head,*tail;
printf("Please input a string:\n");
gets(str);
strcpy(copy,str);
head=str;
tail=str+strlen(str)-1;
while(head {
temp=*head;
*head++=*tail;
*tail--=temp;
}
if(strcmp(copy,str)==0)
printf("该字符串为回文。\n");
else
printf("该字符串不是回文。\n");
}
和下面的程序有什么区别?

#include
#include
void main()
{
char s[100],a[100];
char *p=s,*q=s+strlen(s)-1;
char temp;
gets(s);
strcpy(a,s);
while(p {
temp=*p;
*p++=*q;
*q--=temp;
}
puts(s);
if(strcmp(s,a)==0)
printf("该字符串为回文");
else
printf("该字符串不是回文");
}
为什么第一个是对的,而第二个运行时会输出乱码?
最佳答案
  • 五星知识达人网友:孤独入客枕
  • 2021-01-04 06:35
哥哥来说下~~~!

为什么第二个程序运行是错的呢?我们看上去几乎是一样的,但是仔细的看我们会发现指向字符串结尾字符的指针(在第一个程序中是指针变量tail,在第二个程序中是指针变量q)在初始化时并没有在同一时候,第一个程序是在输入了字符串数组str之后,再求它的长度然后给指针tail赋值;而第二个程序是在指针变量q定义时候就直接求出字符串数组s的长度然后直接初始化,这时候字符串s还没有输入,即没有确定,兄弟你可能会问,指针变量不是既可以在定义时候初始化,也可以在定义之后,再对它赋值吗?是,这确实没错,那么问题出在哪呢?

分析如下:

第一个程序之所以合理是因为在字符串数组确定之后才求其长度的,是合理的。
而第二个程序之所以不合理是因为在定义字符串数组s的时候没有初始化,然后就直接通过strlen函数求其长度,由于strlen是通过'\0'来确定字符串结束的,而这时由于s不确定,所以没有'\0',通过strlen求得的长度出现异常,就造成了指针变量q指向的位置不对。所以最后puts(s);打出的是乱码,而且会出现内存错误~!

兄弟明白?
全部回答
  • 1楼网友:由着我着迷
  • 2021-01-04 07:08
#include "stdio.h" #include "stdlib.h" #include "string.h" int judger(char a[]) { char *p=a; char *q=a+strlen(a)-1; while(p<=q) { if(*p!=*q) return 0; p++; q--; } return 1; } main() { char str[100]; scanf("%s",str); if(judger(str)) { printf("yes!\n"); } else { printf("no£¡\n"); } system("pause"); } 测试数据: louzhunihao no! 请按任意键继续. . . accepttpecca yes! 请按任意键继续. . . 楼主好运!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯