Nader
Nader

Reputation: 55

palindrome and mirrored string

i'm writing a code that read lines of string and check if it's mirrored, palindrome or mirrored palindrome the problem is that it's always displaying wrong value's for inputs except the last one

Sample Input:

NOTAPALINDROME 
ISAPALINILAPASI 
2A3MEAS 
ATOYOTA

Code:

  #include<iostream>
  #include<string>
  #include<vector>
  using namespace std;

bool is_palindrome(const string &s)
{
    for(int i=0,j=s.length()-1;i!=j;i++,j--)
    {
        if(s[i]!=s[j])
            return false;
    }
    return true;
}
char get_mirror(const char &c)
{
    switch(c)
    {

    case 'A':return c;
    case 'E':return '3';
    case 'H':return c;
    case 'I':return c;
    case 'J':return 'L';
    case'L':return 'J';
    case'M':return c;
    case 'O':return c;
    case 'S':return '2';
    case 'T':return c;
    case'U':return c;
    case'W':return c;
    case'X':return c;
    case'Y':return c;
    case'Z':return '5';
    case'1':return c;
    case'2':return 'S';
    case'3':return 'E';
    case'5':return 'Z';
    case'8':return c;
    default: return'-1'; 

    }
}
 bool is_mirrored(const string &s)
 {
     for(int i=0,j=s.length()-1;i!=j;i++,j--)
     {
         if(get_mirror(s[i])!=s[j])
         {
             return false;

         }
     }
     return true;

 }

int main()
{
    vector<string>cases;
    vector<string>::iterator pt;
    string temp;
    while(getline(cin,temp))
    {
        cases.push_back(temp);

    }
    for(pt=cases.begin();pt!=cases.end();pt++)
    {
        cout<<*pt<<"    "<<is_palindrome(*pt)<<"   "<<is_mirrored(*pt)<<endl;
    }

    system("pause");
    return 0;
}

Output if many strings:

NOTAPALINDROME
ISAPALINILAPASI
2A3MEAS
ATOYOTA
^Z
NOTAPALINDROME     0   0
ISAPALINILAPASI     0   0
2A3MEAS     0   0
ATOYOTA    1   1
Press any key to continue . . .

Output if one string:

2A3MEAS
^Z
2A3MEAS    0   1
Press any key to continue . . .

Upvotes: 2

Views: 4150

Answers (1)

Scott Mermelstein
Scott Mermelstein

Reputation: 15397

Your input seems to have additional whitespace that's wrecking your string checks. Evidence of this is that your ouput for the many strings show 5 spaces instead of the 4 it should, except in the final line. Either clean your input manually, or trim your input string in your program. (See, e.g. What's the best way to trim std::string?.)

Upvotes: 2

Related Questions