Witam, ostatnio robiłem program, który miał posortować wszystkie słowa alfabetycznie. Podczas tego, natknąłem się na temat o tym, że można porównywać stringi zwykłymi operatorami. I tutaj moje pytanie, jak kompilator interpretuje to: "Ala">"Ola"? Dlaczego Ala jest "większa" od Oli? W jaki sposób porównuje on te dwa słowa? Myślałem, że może sumuje wartości wszystkich liter, ale to bez sensu i wtedy nie wychodzi sortowanie alfabetyczne.
Proszę o odpowiedź i pozdrawiam.
Porównywanie stringów.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 12
0
- Rejestracja: dni
- Ostatnio: dni
0
Zaimplementuj sortowanie alfabetyczne, a olśnionym będziesz.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2500
0
Porównanie leksykograficzne:
http://edu.i-lo.tarnow.pl/inf/utils/001_2008/0411.php
- Rejestracja: dni
- Ostatnio: dni
1
Po pierwsze "Ala" NIE JEST WIĘKSZA od "Ola", bo takie coś jest źle (mino, że się skompiluje):
if ("Ala">"Ola") {}
char ala[] = "Ala";
if (ala>"Ola")
bo będą porównane ADRESY tych napisów, a nie rzeczywista relacja leksykograficzna miedzy napisami! Ergo masz niezdefiniowane zachowanie, a już na pewno nie jest one zależna od zawartości napisów.
W C napisy porównuje się funkcją strcmp!
if (strcmp("Ala", "Ola")>0) {}
W C++ masz kasę do obsługi napisów std::string, dla niej takie porównania zadziałają prawidłowo:
if (std::string("Ala")>"Ola")
if (std::string("Ala")>std::string("Ola")) {}
std::string ala("Ala");
if (ala>"Ola") {}
Kompilatorowi nic do tego jak porównywać napisy, tym zajmuje się biblioteka standardowa (albo zewnętrzna).