Cześć,
moim zadaniem było napisać program sprawdzający, czy w zdaniu znajduje się palindrom lub czy samo zdanie lub słowo jest palindromem. Poniżej znajduje się kod:
#include <iostream>
#include <cstring>
#include <cctype>
#include <conio.h>
using namespace std;
char wybor;
string tylko_litery(string s)
{
int i=0;
while(s.size() > i)
{
if((toupper(s[i]>='A'))&&(toupper(s[i]<='Z'))) i++;
else s.erase(i,1);
}
return s;
}
bool palindrom(string s)
{
int j = s.size() - 1;
int i = 0;
while(i < j)
{
if(toupper(s[i])==toupper(s[j]))
{
i++; j--;
}
else return false;
}
return true;
}
int main()
{
cout << "1. Sprawdzanie, czy w zdaniu sa palindromy"<<endl;
cout << "2. Sprawdzanie, czy wyraz badz zdanie jest palindromem"<<endl;
wybor=getch();
switch(wybor)
{
case '1':
{
string zdanie, sub;
int poz;
getline(cin, zdanie);
zdanie = zdanie + ' ';
while(zdanie.size()>0)
{
poz = zdanie.find(' ');
if(poz > 0)
{
sub = zdanie.substr(0, poz);
if(palindrom(sub)) cout << sub <<endl;
}
zdanie.erase(0, poz+1);
}
break;
}
case '2':
{
string zdanie;
getline(cin, zdanie);
string n = tylko_litery(zdanie);
if(palindrom(n)) cout << "TAK";
else cout << "NIE";
break;
}
}
return 0;
}
Mam problem z drugim przypadkiem - program niezależnie od zdania czy wyrazu jaki wpiszemy zwraca "TAK", a powinno się to oczywiście dziać tylko wtedy, gdy słowo bądź zdanie jest palindromem. W przypadku pierwszym program jednak wypisuje poprawnie palindromy ze zdania, także myślę że sama funkcja palindrom() jest ok.
Będę wdzięczny za wskazanie błędu :)