C++:给定一个字符串,验证是否为回文,只考虑字母和数字字符,忽略字母大小写。

#include<iostream> 
#include<cstring> 
using namespace std; 
int isPalindrome(char s[]); 
int main() 
{
    
     
	char s[100]; 
	gets(s); 
	if (isPalindrome(s)) 
		cout << "true"; 
	else 
		cout << "false"; 
	return 0; 
	
} 
void tolwr(char *s) 
{
    
     
	int len=strlen(s);
	for(int i=0;i<len;i++)
	{
    
    
		if(s[i]>='a'&&s[i]<='z')
		{
    
    
			s[i]-=32;//字母全部转化成大写
		}
	}
}
 int isPalindrome(char *s) 
{
    
     
 	tolwr(s); 
	int left = 0; 
	int right = strlen(s) - 1; 
	int x=1;
	while(left<right)
	{
    
    
		while(left<right&&!(s[left] >= '0' && s[left] <= 9 || s[left] >= 'A' && s[left] <= 'Z'))
		{
    
    
			left++;//左边不符合字母和数字的条件就往右走
		}
		while(left<right&&!(s[left] >= '0' && s[right] <= 9 || s[right] >= 'A' && s[right] <= 'Z'))
		{
    
    
			right--;//右边不符合条件就往左走
		}
		if(s[left]!=s[right])//符合字母和数字的条件,开始判断
		{
    
    
			x=0;//不符合就直接返回不是回文
			break;
		}
		left++;//接着下一轮
		right--;
	}
	return x;
}

**

测试:

**
输入样例:
A man, a plan, a canal; Panama
输出:
true

输入样例:
race a car
输出:
false

by北科sjk

猜你喜欢

转载自blog.csdn.net/weixin_45850972/article/details/106032455
今日推荐