Ciągi znaków jako tablice char
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 12 z 63.
W języku C nie ma wbudowanego typu danych string, który można znaleźć w innych językach programowania. Zamiast tego ciągi znaków są reprezentowane jako tablice znaków. To podstawowe pojęcie jest niezbędne do zrozumienia, jak tekst jest obsługiwany w języku C.
Ciąg znaków w C to po prostu sekwencja znaków przechowywanych w kolejnych komórkach pamięci. Aby utworzyć ciąg znaków, deklarujesz tablicę znaków wystarczająco dużą, by pomieścić wszystkie potrzebne znaki oraz jedno dodatkowe miejsce na specjalny znak kończący.
char greeting[6]; // Może pomieścić 5 znaków + znak kończący
char message[20]; // Może pomieścić maksymalnie 19 znaków + znak kończącyNajwygodniej pracować z ciągami znaków, inicjalizując je bezpośrednio za pomocą literału ciągu znaków podczas deklarowania tablicy. C automatycznie zajmuje się szczegółami przechowywania każdego znaku w tablicy:
char greeting[6] = "Hello";
// To przechowuje: 'H', 'e', 'l', 'l', 'o' oraz specjalny znak kończącyMożesz też pozwolić językowi C automatycznie określić rozmiar tablicy, pomijając specyfikację rozmiaru podczas inicjalizacji za pomocą literału łańcuchowego:
char greeting[] = "Hello"; // C automatycznie ustala rozmiar tej tablicy na 6Zrozumienie, że ciągi znaków są tablicami znaków, jest kluczowe, ponieważ wyjaśnia, jak C obsługuje dane tekstowe, i przygotowuje Cię do pracy z funkcjami manipulującymi ciągami, które działają na tych tablicach znaków.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje tworzenie tablic znaków i pracę z nimi w celu przechowywania ciągów znaków. Twój program powinien:
- Zadeklarować tablicę znaków o nazwie
greetingz wystarczającą ilością miejsca na ciąg znaków "Hello" (pamiętaj o uwzględnieniu terminatora null) - Zainicjalizować tablicę
greetingliterałem ciągu znaków "Hello" - Zadeklarować drugą tablicę znaków o nazwie
messagez 20 elementami - Zainicjalizować tablicę
messageliterałem ciągu znaków "Welcome" - Zadeklarować trzecią tablicę znaków o nazwie
wordbez określania rozmiaru i pozwolić językowi C automatycznie ustalić jej rozmiar poprzez zainicjalizowanie jej wartością "Programming" - Wypisać wszystkie trzy ciągi znaków za pomocą
printfze specyfikatorem formatu%s - Wypisać rozmiar każdej tablicy za pomocą
sizeof, aby pokazać, ile pamięci zajmuje każda tablica znaków
Wynik powinien być wyświetlony w następującym formacie:
greeting: Hello
message: Welcome
word: Programming
Size of greeting: 6
Size of message: 20
Size of word: 12To wyzwanie sprawdza, czy rozumiesz, jak deklarować tablice znaków do przechowywania ciągów znaków, jak literały ciągów znaków są automatycznie zakończone znakiem null po przypisaniu do tablic znaków oraz jak język C automatycznie oblicza rozmiary tablic, gdy podczas inicjalizacji pomijasz specyfikację rozmiaru.
Spróbuj swoich sił
#include <stdio.h>
int main() {
// TODO: Napisz tutaj swój kod
// Zadeklaruj i zainicjalizuj tablice znaków zgodnie z treścią zadania
// Wypisz ciągi znaków i ich rozmiary
printf("greeting: %s\n", greeting);
printf("message: %s\n", message);
printf("word: %s\n", word);
printf("Size of greeting: %lu\n", sizeof(greeting));
printf("Size of message: %lu\n", sizeof(message));
printf("Size of word: %lu\n", sizeof(word));
return 0;
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i sterowanie przepływem
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online