Rozdział 6. ♦ Ciągi znaków, data i czas 167
Rysunek 6.7.
Efekt działania przykładu ilustrującego zamianą kolejności argumentów funkcji printf
Mk Edycja Widok Przejdź Zakładki fjarzędzia Pomoc | |
- • ’ & ■<* tVj) |u http://localhost/index.php |
-3 |
tśk* Rozpocznij przygód... i Aktualności |
Liczba ma wartość 100, napis ma wartość abcd Napis ma wartość 100, liczba ma wartość 0 Napis ma wartość abcd, liczba ma wartość 100
zmieniać kolejności argumentów w funkcji printf, rozwiązaniem jest zmiana ich kolejności w ciągu formatującym. Taka zamiana została wykonana w ciągu format3, dzięki czemu funkcja pri ntf mogła zadziałać zgodnie z założeniami.
Ciągi znaków mogą być porównywane zarówno za pomocą operatorów porównywania zaprezentowanych w tabeli 2.12 w rozdziale 2., jak i funkcji porównujących. Często wykorzystywaną funkcją jest strcmp, której wywołanie ma schematyczną postać: strcmp("ciągi", "ciąg?")
Funkcja ta zwraca wartość mniejszą od zera, jeśli ciągi jest mniejszy niż ciąg2\ wartość większą od zera, jeśli ciągi jest większy od ciąg2; lub wartość 0, jeśli ciągi są sobie równe. Porównywanie odbywa się według porządku leksykograficznego, czyli przykładowo:
♦ ciąg abcjest mniejszy niż abd
♦ ciągedf jest większy niż abc
♦ ciąg Abc jest większy niż abc
♦ ciąg abcjest mniejszy niż aBc
♦ ciąg 52 jest większy (!) niż 152
Funkcją podobną do strcmp jest strcasecmp. Działa ona w prawie identyczny sposób, lecz nie bierze pod uwagę wielkości liter.
Obie wymienione funkcje mają również swoje odmiany, które pozwalają na zdefiniowanie, ile znaków z pierwszego i drugiego ciągu będzie podlegało porównywaniu. Są to: strnonp i strncasecmp. Wywołanie strncmp (i analogicznie strncasecmp) ma schematyczną postać:
strncmp("ci391". "ciąg2". ile)
gdzie parametr ile określa liczbę porównywanych znaków. Zarówno strncmp, jak i strncasecmp zwraca wartość mniejszą od zera, jeśli ciągi jest mniejszy niż ciąg2-, wartość większą od zera, jeśli ciągi jest większy od ciąg2; lub wartość 0, jeśli ciągi są sobie równe.