函数接口定义:
int isPalindrome(const char* str, char* pch);
其中 str
和 pch
都是用户传入的参数。 str
是字符串的首地址; pch
是传入的要存放字符串中间字符的变量的地址。如果字符串是回文,函数须返1,否则返回0。
裁判测试程序样例:
/* 测试程序仅为示例,实际的测试程序可能不同 */
#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;
}
/* 你编写的函数代码将被嵌在这里 */
输入样例:
ABCDACBC
输出样例:
不是回文!中间字符是D
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
题目分析:
Void是在周测遇到的这道题,其他的题目都作对了,就卡在这一道题上,一开始一直错,感觉是有点难度就推到后面做,但其实这道回文数的题目是很简单的,这也告诉了Viod,“复杂的程序都是由小的模块拼接的”,其实程序里面最难的是算法,就这道回文数题而言,回文数的算法确实是重中之重。下面代码含金量最高的也在这里。
c语言代码:
int isPalindrome(const char* str, char* pch)
{
int flag=1;//标志
int i,j;//变量组
int length;//字符串长度
length=strlen(str);//字符串长度的测量方法
if(length==1)
{
*pch=str[0];//指针使用方法,将pch指向str[]的地址
return 1;
}
//测出长度,开始核心判断
for(i=0,j=length-1;i<length;i++,j--)
{
if(str[i]!=str[j])//回文数判断算法,双变量循环
{flag=0;break;}
}
if(length%2==0)
*pch=str[(length/2)-1];//中心符号的判定,分奇偶
else
*pch=str[(length-1)/2];
//这里不能把pch的指向判断放入flag==1的if判断中
/*即,不能这么写:
if(flag==1)
{
if(length%2==0)
*pch=str[(length/2)-1];
else
*pch=str[(length-1)/2];
return 1;
}
这样写会使非回文数不会出现pch的指向*/
if(flag==1)
return 1;
else
return 0;
}
运行截图: