判斷給的字串是不是回文還是鏡像,有以下四種狀況:
- 是回文也是鏡像-左右翻轉後看起來是一樣,順著看或倒著看也一樣,ex.ATOYOTA
- 鏡像-左右翻轉後看起來是一樣,ex.2A3MEAS
- 回文-順著看或倒著看也一樣,ex.ISAPALINILAPASI
- 都不是
#include <iostream>
#include <string>
using namespace std;
string f = "AEHIJLMOSTUVWXYZ12358";
string b = "A3HILJMO2TUVWXY51SEZ8";
bool p_flag(string input);
bool m_flag(string input);
int main()
{
bool p_result,m_result;
string input_string;
while( getline( cin, input_string ) )
{
p_result = p_flag(input_string);
m_result = m_flag(input_string);
if( p_result && m_result )
cout << input_string << " -- is a mirrored palindrome." << endl;
else if( p_result )
cout << input_string << " -- is a regular palindrome." << endl;
else if( m_result )
cout << input_string << " -- is a mirrored string." << endl;
else
cout << input_string << " -- is not a palindrome." << endl;
cout << endl;
}
}
//判斷是不是回文
//一個由前往後一個由後往前,相互比較
bool p_flag(string input)
{
int backward = input.length() - 1;
for( int i = 0; ; i++, backward-- )
{
if( i <= backward )
{
if( input[i] != input[backward] )
return false;
}
else
return true;
}
}
//判斷是不是鏡像
bool m_flag(string input)
{
int backward = input.length() - 1;
int f_point,b_point;
for( int forward = 0; ; forward++, backward-- )
{
if( forward <= backward )
{
for( int i = 0; i < f.length(); i++ )
if( f[i] == input[forward] )
f_point = i;
for( int i = 0; i < b.length(); i++ )
if( b[i] == input[backward] )
b_point = i;
if( f_point != b_point )
return false;
}
else
return true;
}
}
沒有留言:
張貼留言