怎样判断输入的字符串是否为回文?
解决时间 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!
请按任意键继续. . .
楼主好运!
我要举报
大家都在看
推荐资讯