现在的位置: 首页 > 综合 > 正文

UVa 401: Palindromes

2013年08月31日 ⁄ 综合 ⁄ 共 1229字 ⁄ 字号 评论关闭

这是一道简单的字符串处理问题,需要判断所给字符串是否是回文或是“镜子串”。

回文的判断:只需要判断串的首尾字符是否相同,然后首尾同时向中间移一个字符再判断,如此循环。

“镜子串”的判断:先将原串替换为reverse后的串,然后与原串比较是否相同即可。

我的代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;

char input[25];
const char CharReverse[] = "A   3  HIL JM O   2TUVWXY5";
const char NumReverse[] = "01SE Z  8 ";
int is_palindrome()
{
	int length=strlen(input);
	int i=0, j=length-1;
	while(i<=j)
	{
		if(input[i++]!=input[j--]) break;
	}
	if(i>j) return 1;
	else return 0;
}
int is_mirrored()
{
	char Reverse[25];
	int length=strlen(input);
	for(int i=0; i<length; i++)
	{
		if(input[i]>='A' && input[i]<='Z')
			Reverse[length-i-1]=CharReverse[input[i]-'A'];
		else if(input[i]>='0' && input[i]<='9')
			Reverse[length-i-1]=NumReverse[input[i]-'0'];
	}
	Reverse[length]='\0';
	if(strcmp(input,Reverse)==0) return 1;
	else return 0;
}
int main()
{
	int flag_palindrome,flag_mirrored;
	while(cin >> input)
	{
		flag_palindrome = flag_mirrored = 0;
		flag_palindrome = is_palindrome();
		flag_mirrored = is_mirrored();
		cout << input;
		if(!flag_palindrome && !flag_mirrored)
			cout << " -- is not a palindrome.\n\n";
		else if(flag_palindrome && !flag_mirrored)
			cout << " -- is a regular palindrome.\n\n";
		else if(!flag_palindrome && flag_mirrored)
			cout << " -- is a mirrored string.\n\n";
		else if(flag_palindrome && flag_mirrored)
			cout << " -- is a mirrored palindrome.\n\n";
	}
	return 0;
}

抱歉!评论已关闭.