欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

F2 判断回文 (10 分)

程序员文章站 2024-03-24 12:24:52
...

如果一串字符从左至右读和从右至左读相同,那么这串字符就是回文(Palindrome)。例如,ABCBA是回文,而ABCD则不是。本题要求编写一个判断字符串是否为回文的函数,并且通过函数参数获取字符串的中间字符(如果中间是两个字符,则获取靠左的那一个,例如字符串是ABCDEF,则中间字符是C)。题目保证输入的字符串长度在1至2000之间且不含空格、换行等分隔符。

函数接口定义: 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

总体来说,还是简单题。主要是回文的判断,也是最普通的比较而已。要注意只有一个字符的情况。

int isPalindrome(const char* str,char* pch)
{
	//首先要判断是否为回文,如何判断呢?第一个和最后一个比嘛
	int len = strlen(str);
	//	printf("len = %d\n",len);
	if(len==1)
	{
		*pch = str[0];
		return 1;
	}
	
	if(len%2==0)
		*pch = str[len/2-1];   //中间是两个字符的情况 
	else
		*pch = str[(len)/2];  //中间是一个字符,也就是长度为奇数。
	
	int i;
	for(i=0;i<=len/2;i++)
	{
		if(str[i]!=str[len-1-i]) return 0; //比较是否相等 
	}
	return 1; 
}

这个好像是C语言的基础题了。