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ć