回文字符串的判定------非递归与递归实现(未完)

本文介绍了一种非递归方法来检测字符串是否具有回文特性,通过遍历字符串并过滤掉非字母数字字符,将所有字符转换为小写形式,然后检查处理后的字符串是否为回文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

检测一个字符串时候具有回文特性,回文特性的字符包括字母(同一字母的大小写等价)和数字,并且可以忽略空格和标点符号。


1.非递归实现

   这里非递归实现的思想就是遍历字符串,将字符串strsrc[]的字母和数字赋给另一个字符数组str(目的是为了消除其他标号对判断回文的干扰),然后判断str[]是否是回文,它和源字符串strsrc的回文特性是一致的。

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 20
void TestPalindrome(const char *strsrc);
int main(void)
{
    
	char *strsrc=(char *)malloc(sizeof(char)*MAX);
	printf("input the string you want to test:\n");
	gets(strsrc);
	TestPalindrome(strsrc);
	return 0;
}

void TestPalindrome(const char *strsrc)
{
	char *p1=(char *)malloc(sizeof(char)*MAX);
	char *str=(char *)malloc(sizeof(char)*MAX);
	int j,i=0;
	if(NULL==p1 || NULL==str)
	{
		printf("insufficient memory!\n");
		exit(0);
	}
	strcpy(p1,strsrc);
	while(*p1 !='\0')
	{
		if(*p1>='A' && *p1<='Z')//'A'~'Z'---->'a'~'z'
			*p1=*p1+'a'-'A';
		if((*p1>='a' && *p1<='z') || (*p1>='0' && *p1<='9'))
		{
			str[i]=*p1;//将源字符串的字母和数字赋给字符串数组src[]
			i++;
		}
		p1++;
	}	
    for(j=0;j<i/2;j++)
	{
		if(str[j] !=str[i-j-1])
			break;
	}
	if(j>=i/2)
		printf("该字符串为回文序列!\n");
	else
		printf("该字符串不是回文序列!\n");
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值