Palindromy

0

Napisałem program sprawdzający czy dany wyraz jest palindromem, program działa, lecz nie wiem czy użyty 'algorytm' jest poprawny, gdyż nie zetknąłem się z takim sposobem w internecie. Czy tok rozumowania jest poprawny, czy może jest to zby "mechaniczna" metoda?

#include <iostream>

using namespace std;
string wyraz;
string wyraz1;

int dlugosc;
int main()
{

    cout << "podaj wyraz" << endl;
    cin>>wyraz;
    wyraz1=wyraz;
    dlugosc=wyraz.length();
    for(int i=0;i<=(dlugosc-1)/2;i++)
    {

           swap(wyraz[i],wyraz[(dlugosc-1)-i]);



    }
    if(wyraz==wyraz1)
    {
        cout<<"palindrom";
    }
else
{
    cout<<"nie sa palindromami";
}


    return 0;
}
0

Pomijając bezsensowne zmienne globalne oraz nadmiarowy koszt pamięciowy O(n) zamiast O(1) podany algorytm nie jest poprawny, nie stwierdzi że "Ala" jest palindromem, ani też "kobyla ma maly bok"

#include <iostream>
#include <cctype>
using namespace std;

bool IsPalindrom(const string &text)
{
   size_t S=text.size()-1;
   for(size_t i=0,k=S;i<k;++i,--k)
   {
      if(isspace(text[i])) ++k;
      else if(isspace(text[k])) --i;
      else if(toupper(text[i])!=toupper(text[k])) return false;
   }
 return true;
}

void check(const string &text)
{
   cout<<"\""<<text<<"\""<<(IsPalindrom(text)?"":" NIE")<<" jest palindromem"<<endl;
}

int main()
{
   check("abc");
   check("Kobyla ma maly bok");
   check("Ala");
   return 0;
}
2

Ćwiczonko z C++20 ranges:
https://wandbox.org/permlink/zeYXqGw40G8WP4Z3
kod nie-najlepszy, trzeba jeszcze pokombinować z charsToTest.

1 użytkowników online, w tym zalogowanych: 0, gości: 1