• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed palindromy funkcja c++

Object Storage Arubacloud
0 głosów
827 wizyt
pytanie zadane 24 marca 2020 w C i C++ przez Niepokonana7999 Bywalec (2,270 p.)
zamknięte 24 marca 2020 przez Niepokonana7999

bool pal ( string slowo ) ///sprawdza czy liczba jest palindromem.
{
    for ( int i=0; i < slowo.length()/2; i++)
    {
        
        if ( !( slowo[i];==slowo[slowo.length()-i]  /*|| slowo[i]+32==slowo[slowo.length()- i] || slowo[i]-32== slowo[slowo.length()- i]*/ ))
        {
            return false;
        }



    }

    return true;
}

Witam

Proszę o poprawienie błędu w moim kodzie. Palindrom to jest słowo, które od tyłu czyta się tak samo jak od przodu. Niestety, moja funkcja nie działa i zawsze zwraca fałsz. Zakomentowana część jest na wypadek, gdyby litery były różnej wielkości, odkomentuję ją, jak reszta będzie działać.

 

komentarz zamknięcia: sama poprawiłam.

1 odpowiedź

0 głosów
odpowiedź 24 marca 2020 przez tkz Nałogowiec (42,000 p.)
bool pal ( std::string slowo ) ///sprawdza czy liczba jest palindromem.
{
    const unsigned DLUGOSC_SLOWA = slowo.length();
    for ( unsigned i=0; i < DLUGOSC_SLOWA/2; i++)
    {
        if(slowo[i]!=slowo[DLUGOSC_SLOWA-i-1])
            return false;
    }
    return true;
}

 

komentarz 24 marca 2020 przez tkz Nałogowiec (42,000 p.)
Oczywiście wiem, że będzie to mało wydajny sposób, przez tworzenie nowego stringa. Porównanie tych dwóch sposobów było by kompletnie bezsensu. Porównałem Twój sposób z equal i mój przy użyciu ==.
komentarz 24 marca 2020 przez Great Stary wyjadacz (12,360 p.)

Jak widać przy O3 oba kody mają zbliżony czas wykonania (każdy może być szybszy od drugiego podczas kolejnych prób testowania), a oczywiście karkołomny sposób jest miliony razy wolniejszy (jeszcze podany z błędem i niepotrzebnie utrudniony). Proszę wytłumacz mi czego nie rozumiem z std::equal:

https://en.cppreference.com/w/cpp/algorithm/equal

komentarz 24 marca 2020 przez tkz Nałogowiec (42,000 p.)

http://quick-bench.com/0iu_GiAU3-g0Ez0e4gD43BaBmws Porównaj ten kod, który przy założeniach jest taki sam, tylko Ty używasz equal, a ja nie. Twoja próba jest blisko 5 razy wolniejsza. Korzystanie ze sztuczek kompilatora i porównywanie wydajności jest bezcelowe. Chociaż sam fakt, że dopiero przy maksymalnej optymalizacji Twój kod jest zaledwie 1.3 razy szybszy jest w mojej opinii nic niewarty.  

Abstrahując od metody z equal, mój pierwszy komentarz nie podkreślał nigdzie, że będzie szybciej, co by było oczywiście kłamstwem, ze względu na konieczność kopiowania stringa. Wydajność nie jest problem, dopóki problemem nie jest wydajność. Twój kod jest na pewno bardziej "przemawiający".  

Te dwa kody są sobie tak naprawdę równoważne, złożoność cyklometryczna jest również taka sama(equal, to tak naprawdę pętla z instrukcją warunkową), złożoność obliczeniowa, nie wiem. 

Spojrzałem na link z benchmarkiem "karkołomnego" kodu, ładniej ująłeś return, przyznaje,

komentarz 24 marca 2020 przez mokrowski Mędrzec (155,460 p.)
http://quick-bench.com/JIeoDSftWbiuDpdlt8-UErCDnI8

Jeszcze bym coś wycisnął ale czytelność dyskusyjna.
komentarz 30 marca 2020 przez Niepokonana7999 Bywalec (2,270 p.)

@tkz, Ja wiem, że Pański kod jest lepszy i w ogóle bardziej optymalny. Gdybym ćwiczyła sama dla siebie, to bym Pańskiego kodu użyła. Tylko to była moja praca domowa i mój nauczyciel za żadne skarby świata by nie uwierzył, że ja sama taki kod napisałam i rozumiem. Nie mogę ryzykować.

Podobne pytania

0 głosów
1 odpowiedź 355 wizyt
pytanie zadane 4 marca 2021 w Python przez Igor0703 Nowicjusz (140 p.)
–1 głos
2 odpowiedzi 556 wizyt
0 głosów
0 odpowiedzi 535 wizyt
pytanie zadane 20 października 2022 w Systemy operacyjne, programy przez MarcinB Początkujący (330 p.)

92,555 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,941 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...