|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:判断回文 (20分):
在PTA平台上做题有两个测试点不通过,请大家帮忙看一下是哪里的问题,谢谢啦
我的代码:
- #include <stdio.h>
- #include <string.h>
- #define MAXLENGTH 100
- int isPalindrome(const char* str, char* pch);
- int main(){
- char str[MAXLENGTH],mid;
- scanf("%s",str);
- if(isPalindrome(str, &mid))
- printf("是回文!中间字符是%c\n",mid);
- else
- printf("不是回文!中间字符是%c\n",mid);
- return 0;
- }
- int isPalindrome(const char* str, char* pch)
- {
- int count=0,joshu,i=0,j=0,count1,biaoji=1;
- while(*(str+i)!='\0')
- {
- count++;
- i++;
- }
- if(count%2==1)
- joshu=(1+count)/2-1;
- if(count%2==0)
- joshu=2/count-1;
- *pch=*(str+joshu);
- count1=count;
- if(count%2==1)
- {
- //奇数个字符
- for(i=1;i<=(count-1)/2;i++)
- {
- if(*(str+j)!=*(str+count1-1))
- {
- biaoji=0;
- break;
- }
- j++;
- count1--;
- }
- }
- if(count%2==0)
- {
- //偶数个字符
- for(i=1;i<=count/2;i++)
- {
- if(*(str+j)!=*(str+count1-1))
- {
- biaoji=0;
- break;
- }
- j++;
- count1--;
- }
- }
- if(biaoji==1)
- return 1;
- else
- return 0;
- }
复制代码
本帖最后由 超凡天赐 于 2017-5-26 15:47 编辑
在第二十六行,除非你输入的字母个数是一个或两个,joshu永远等于-1,*(str-1)本身就越界了。第二十六行应改为
整个代码就是
- #include <stdio.h>
- #include <string.h>
- #define MAXLENGTH 100
- int isPalindrome(const char* str, char* pch);
- int main(){
- char str[MAXLENGTH],mid;
- scanf("%s",str);
- if(isPalindrome(str, &mid))
- printf("是回文!中间字符是%c\n",mid);
- else
- printf("不是回文!中间字符是%c\n",mid);
- return 0;
- }
- int isPalindrome(const char* str, char* pch)
- {
- int count=0,joshu = 0,i=0,j=0,count1,biaoji=1;
- while(*(str+i)!='\0')
- {
- count++;
- i++;
- }
- if(count%2==1)
- joshu=(1+count)/2-1;
- if(count%2==0)
- joshu=count/2-1;
- *pch=*(str+joshu);
- count1=count;
- if(count%2==1)
- {
- //奇数个字符
- for(i=1;i<=(count-1)/2;i++)
- {
- if(*(str+j)!=*(str+count1-1))
- {
- biaoji=0;
- break;
- }
- j++;
- count1--;
- }
- }
-
- if(count%2==0)
- {
- //偶数个字符
- for(i=1;i<=count/2;i++)
- {
- if(*(str+j)!=*(str+count1-1))
- {
- biaoji=0;
- break;
- }
- j++;
- count1--;
- }
- }
-
- if(biaoji==1)
- return 1;
- else
- return 0;
-
- }
复制代码
|
|