132 ROZDZIAŁ 18. NAPISY Warto zaznaczyć, że znak nowej linii (’\n’) jest w różny sposób przechowywany w róż- nych systemach operacyjnych. Wiąże się to z pewnymi historycznymi uwarunkowaniami. W niektórych systemach używa się do tego jednego znaku o kodzie 0x0A (Line Feed — nowa linia). Do tej rodziny zaliczamy systemy z rodziny Unix: Linux, *BSD, Mac OS X inne. Drugą konwencją jest zapisywanie ’\n’ za pomocą dwóch znaków: LF (Line Feed) + CR (Carriage return — powrót karetki). Znak CR reprezentowany jest przez wartość 0x0D. Kombinacji tych dwóch znaków używają m.in.: CP/M, DOS, OS/2, Microsoft Windows. Trzecia grupa systemów używa do tego celu samego znaku CR. Są to systemy działające na komputerach Commodore, Apple II oraz Mac OS do wersji 9. W związku z tym plik utworzony w systemie Linux może wyglądać dziwnie pod systemem Windows. Operacje na łańcuchach Porównywanie łańcuchów Napisy to tak naprawdę wskaźniki. Tak więc używając zwykłego operatora porównania ==, otrzymamy wynik porównania adresów a nie tekstów. Do porównywania dwóch ciągów znaków należy użyć funkcji strcmp zadeklarowanej w pli- ku nagłówkowym string.h. Jako argument przyjmuje ona dwa napisy i zwraca wartość ujemną jeżeli napis pierwszy jest mniejszy od drugiego, 0 jeżeli napisy są równe lub wartość dodatnią jeżeli napis pierwszy jest większy od drugiego. Ciągi znaków porównywalne są leksykalnie kody znaków, czyli np. (przyjmując kodowanie ASCII) a jest mniejsze od b, ale jest większe od B. Np.: #include #include int main(void) { char str1[100], str2[100]; int cmp; puts("Podaj dwa ciagi znakow: "); fgets(str1, sizeof str1, stdin); fgets(str2, sizeof str2, stdin); cmp = strcmp(str1, str2); if (cmp0) { puts("Pierwszy napis jest wiekszy."); } else { puts("Napisy sa takie same."); } return 0; } Czasami możemy chcieć porównać tylko fragment napisu, np. sprawdzić czy zaczyna się od jakiegoś ciągu. W takich sytuacjach pomocna jest funkcja strncmp. W porównaniu do strcmp() przyjmuje ona jeszcze jeden argument oznaczający maksymalną liczbę znaków do porównania: #include #include
(…)
… może wyglądać dziwnie pod systemem Windows.
Operacje na łańcuchach
Porównywanie łańcuchów
Napisy to tak naprawdę wskaźniki. Tak więc używając zwykłego operatora porównania
==, otrzymamy wynik porównania adresów a nie tekstów.
Do porównywania dwóch ciągów znaków należy użyć funkcji strcmp zadeklarowanej w pliku nagłówkowym string.h. Jako argument przyjmuje ona dwa napisy i zwraca wartość ujemną
jeżeli napis…
... zobacz całą notatkę
Komentarze użytkowników (0)