Palindrom to słowo takie samo od przodu i od tyłu.

Przykłady:

1
2
3
4
5
Kobyła ma mały bok
Kamil Ślimak
121
1221
Kajak

itp.

Algorytm sprawdzania:
1. usuń spacje
2. zmień wielkie litery na małe
3. Sprawdź w pętli czy z przodu jest taki jak od tyłu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <string>
#include <iostream>

using namespace std;

bool isPalindrome(string s)
{
        int back = s.length()-1; //ostatnia litera s
        bool palindrome = true; //zakładamy że jest
        for (int i=0; i<s.length()/2 && palindrome; i++) //tylko do połowy stringu
                if (s[i] != s[back--]) //back po podstawieniu zmniejszy się o 1 z ostatniej na przedostatnią itd.
                        palindrome = false;
                       
        return palindrome;
}

int main()
{
        cout << isPalindrome("kobylamamalybok");
        return 0;
}

Brakuje tylko usuwania spacji i zamiany na małe litery…

Usuwanie spacji – stringstream

Jest to typ STRUMIENIA – w stylu cin albo pliku wejściowego (ifstream) do którego wpisujemy cały string a potem posługujemy się nim jak plikiem (tylko bez otwierania i zamykania)

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <sstream>
#include <string>
#include <iostream>
using namespace std;
int main()
{
       string s("kobyla ma maly bok"), slowo, polacz("");
       stringstream ss(s);
        while(ss >> slowo) //dopóki w strumieniu wejściowym skonstruowanym ze zdania jest jakieś słowo (do spacji)
                polacz += slowo; //dokleja bez spacji do wyniku
        cout << polacz;
        return 0;
}

I mamy podzielone, można je też połączyć

C