Porównywanie stringów.

Porównywanie stringów.
VO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

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.

spartanPAGE
  • Rejestracja: dni
  • Ostatnio: dni
0

Zaimplementuj sortowanie alfabetyczne, a olśnionym będziesz.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
1

Po pierwsze "Ala" NIE JEST WIĘKSZA od "Ola", bo takie coś jest źle (mino, że się skompiluje):

Kopiuj
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!

Kopiuj
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:

Kopiuj
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).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.