Łańcuchy znaków
Transkrypt
Łańcuchy znaków
Łańcuchy znaków Ciągi znaków (ang. strings) używane są do przechowywania i przetwarzania tekstów w programie (wyrazów, zdań itp.). W języku C łańcuch znaków jest tablicą znakową, zawierającą wszystkie znaki przechowywanego tekstu i zakończoną znakiem 0 (NULL, koniec łańcucha). Stałą znakową w języku C zapisuje się w podwójnych cudzysłowach : ”To jest tekst” W języku C łańcuch znaków ma ściśle określoną (przez rozmiar tablicy, która go przechowuje) długość. Przykładowa definicja łańcucha znakowego w programie: char tekst[80] = { ”To jest tekst” }; char *nazwa = ”Politechnika Rzeszowska”; Funkcje do operowania na łańcuchach znaków, z biblioteki string.h: – Wczytywanie łańcucha z klawiatury gets(lancuch); //lub – dziala troche inaczej niż powyzsza scanf(”%s”, lancuch); – Wypisywanie łańcucha na ekran puts(lancuch); //lub printf(”%s”, lancuch); – sprawdzanie długości łańcucha int dlugosc = strlen(lancuch); – porównywanie łańcuchów czyRowne = strcmp(lancuch1, lancuch2); //zwraca 0 gdy są rowne, >0 gdy 1 mniejszy od 2 i <0 gdy 2 //mniejszy od 1 – kopiowanie łańcuchów strcpy(gdzie_skopiowac, co_skopiowac); strncpy(gdzie_skopiowac, co_skopiowac, ile_znakow_skopiowac); – łączenie łańcuchów strcat(lancuch1, lancuch2); //do lancucha1 dokleja lancuch2 Zadania 1. Napisz program który wczyta z klawiatury imię, nazwisko i wypisze na ekranie tekst: Witaj Nazwisko Imię. 2. Napisz program, który będzie wczytywał łańcuch znaków dopóki nie będzie on zgodny z „hasłem” (zdefiniowanym w programie ciągiem znaków). 3. Napisz program, który będzie wczytywał tekst z klawiatury (aż do wystąpienia znaku nowej linii) i „dopisywał” do głównego łańcucha znaków. Program powinien pytać, czy wczytać kolejny tekst i na każdym etapie wypisywać główny łańcuch znaków. 4. Napisz własną funkcję, która obliczy długość łańcucha znaków (odpowiednik strlen). Przygotuj program, w którym zostanie wywołana funkcja dla przykładowych danych. 5. Napisz funkcję, która w łańcuchu znaków znajduje pierwsze wystąpienie znaku podanego jako parametr w zmiennej a typu char i zwróci jego pozycję. Napisz program, który pobierze dane, wywoła tą funkcję i wypisze wynik. 6. Napisz funkcję, która odwróci i połączy dwa łańcuchy znaków. Napisz program, który pobierze dane, wywoła tą funkcję i wypisze wynik. Wskaźniki Na podstawie http://pl.wikibooks.org/wiki/C/Wskaźniki Wskaźnik (ang. pointer) to specjalny rodzaj zmiennej, w której zapisany jest adres w pamięci komputera, tzn. wskaźnik wskazuje miejsce, gdzie zapisana jest jakaś informacja. Adres w pamięci to pewna liczba całkowita, jednoznacznie definiująca położenie pewnego obiektu (czyli np. znaku czy liczby) w pamięci komputera. Przykładowo, patrząc na schemat poniżej, zmienna b przechowuje liczbę całkowitą 17. Znajduje się ona w pamięci komputera pod adresem 1462. By stworzyć wskaźnik do zmiennej i móc się nim posługiwać należy przypisać mu odpowiednią wartość (adres obiektu, na jaki ma wskazywać). Adres ten można uzyskać przy pomocy operatora & (operatora pobrania adresu).: #include <stdio.h> int main (void) { int liczba = 80; printf("Zmienna znajduje (void*)&liczba, liczba); sie pod adresem: %p,: %d\n", return 0; } Aby móc zapisać gdzieś taki adres należy zadeklarować zmienną wskaźnikową. Robi się to poprzez dodanie * (gwiazdki) po typie na jaki zmienna ma wskazywać, np.: int *wskaznik1; Aby dobrać się do wartości wskazywanej przez wskaźnik należy użyć unarnego operatora * (gwiazdka), zwanego operatorem wyłuskania: #include <stdio.h> int main (void) { int liczba = 80; int *wskaznik = &liczba; *wskaznik = 42; printf("Wartosc zmiennej: %d, wartosc wskazywana przez wskaznik: %p\n", liczba, *wskaznik); liczba = 0x42; printf("Wartosc zmiennej: %d, wartosc wskazywana przez wskaznik: %p\n", liczba, *wskaznik); return 0; } Argumentem (lub argumentami) funkcji mogą być wskaźniki. W przypadku "normalnych" zmiennych nasza funkcja działa tylko na lokalnych kopiach tychże argumentów, natomiast nie zmienia zmiennych, które zostały podane jako argument. Natomiast w przypadku wskaźnika, każda operacja na wartości wskazywanej powoduje zmianę wartości zmiennej zewnętrznej. Spróbujmy rozpatrzeć poniższy przykład: #include <stdio.h> void func (int *zmienna) { *zmienna = 5; } int main () { int z=3; printf ("z=%d\n", z); /* wypisze 3 */ func(&z); printf ("z=%d\n", z); /* wypisze 5 */ } Zadania