各位大大来看看,这段代码哪里有漏洞

fly4224614 2012-09-21 02:10:12
今天参加某公司的机试,要求判断一个字符串是不是回文字符串
psdsp 是回文 输出YES
asdas 不是回文 输出 NO
一下是我编写的代码 可是测评才50多分,我想知道这段代码哪里有问题。

#include "stdio.h"
void main()
{
char s[80];
char *p,*q;
int i,a,b,flag=0;
gets(s);
p=s;
q=s;
for(i=0;*(p+i)!='\0';i++)
{}
a=0;
b=i;
while(*(p+a)==*(p+b-1)&&a<b)
{
a++;
b--;
}
if(a>=b)
{
flag=1;
}
if(flag==1)
printf("YES");
else
printf("NO");
}
...全文
98 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alexander 2012-09-21
  • 打赏
  • 举报
回复
空位去除、混淆大小写都不需要么?这个回文测试的要求真低……
[Quote=引用 1 楼 的回复:]

不知正确与否,代码可读性较差.
C/C++ code


#include <cstring>

char const * isXXX(char const* str)
{
char const* lo = str, *hi = str + strlen(str);
while(lo < hi && *lo == *hi)
{
++lo……
[/Quote]
这里出错了,指向末位的指针为
str+strlen(str)-1
阁下定义的hi初始化时指向的是str的结束标志'\0'。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int isPalindrome(const char*);

int main()
{
char *s[]={"psdsp","asdas"};
register int i;

for(i=0;i<2;i++)
puts(isPalindrome(s[i])?"YES":"NO");

system("pause");

return(0);
}

int isPalindrome(const char *s)
{
const char *p=s+strlen(s)-1;

for(;*s==*p&&s<p;s++,p--);

return(s>=p);
}
轮子学长 2012-09-21
  • 打赏
  • 举报
回复
如果是偶数个,且最后一对不等,那么此时a==b。跳出循环
又if(a>=b)
{
flag=1;
}
输出yes
所以错了。

改为
if(a>b)
{
flag=1;
}
试试。


mujiok2003 2012-09-21
  • 打赏
  • 举报
回复
不知正确与否,代码可读性较差.


#include <cstring>

char const * isXXX(char const* str)
{
char const* lo = str, *hi = str + strlen(str);
while(lo < hi && *lo == *hi)
{
++lo, --hi;
}
return hi <= lo ? "YES" ? "NO";
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧