Język C, ciągi znaków, biblioteka standardowa (laboratorium)
Transkrypt
Język C, ciągi znaków, biblioteka standardowa (laboratorium)
Język C, ciągi znaków, biblioteka standardowa (laboratorium) Opracował: Tomasz Mączka ([email protected]) 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 txt[] = { 'S', 'p', 'r', 'i', 'n', 'g', '\0' }; 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); //brak &! scanf(”%99s”, lancuch); //jaka jest różnica? //wczytuje do wystąpienia znaku innego niż zawarty w [] scanf("%[A-Z]s", lancuch); scanf("%[^A-Z]s", lancuch); – //jaka jest roznica? 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 Formatowanie wejście scanf(łańcuch_formatu, lista_argumentów); łańcuch_formatu: %[*][Szerokość][Modyfikator1][Modyfikator2]Typ_danych Szerokość: maksymalna liczba wczytanych znaków Modyfikator1: F,N Modyfikator2: h, l, L Szczegóły: http://pl.wikibooks.org/wiki/C/scanf , http://www.cplusplus.com/reference/clibrary/cstdio/scanf/ Formatowane wyjście printf(łańcuch_formatu, lista_argumentów); łańcuch_formatu: %[pole znaku][szerokość][.dokładność][modyfikator]typ_danych Pole znaku: +, –, #, spacja, 0 Szerokość: całkowita pola przeznaczonego na postać zewnętrzną liczby Dokładność: liczba miejsc po kropce dziesiętnej lub długość łańcucha Modyfikator: F, N, h, l, L Szczegóły: http://pl.wikibooks.org/wiki/C/printf , http://www.cplusplus.com/reference/clibrary/cstdio/printf/ Biblioteka standardowa Ważniejsze pliki nagłówkowe biblioteki standardowej: math.h – funkcje matematyczne string.h – funkcje operujące na łańcuchach znaków stlib.h – dynamiczna alokacja pamięci, liczby pseudolosowe, kownersje łańcuchów znaków do typów liczbowych stdio.h – funkcje standardowego wejścia/wyjścia type.h – funkcje do klasyfikacji i transformacji znaków time.h – funkcje dotyczące daty i czasu Indeks tematyczny funkcji z biblioteki standardowej C: http://pl.wikibooks.org/wiki/C/Biblioteka_standardowa/Indeks_tematyczny Zadania 1. Napisz program który wczyta z klawiatury imię, nazwisko i wypisze na ekranie tekst: Witaj Nazwisko Imię. 2. Napisz program wczytujący z klawiatury zmienną całkowitą, zmiennoprzecinkową i znak , a następnie wypisze wartości każdej z tych zmiennych na ekranie we wszystkich możliwych formatach - stosownych dla typu zmiennej (ósemkowy, szesnastkowy, ze znakiem/bez znaku, naukowy itd.). 3. 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). 4. 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. 5. 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. 6. Napisz funkcję zamieniającą wszystkie duże litery występujące w łańcuchu na małe i odwrotnie. Funkcja powinna zwracać liczbę wykonanych zamian. Wykorzystaj funkcje biblioteczne islower, isupper, tolower, toupper. 7. 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. 8. 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. 9. Napisz programu wypisującą tablicę wartości funkcji sin i cos dla argumentów z zadanego przedziału, z zadanym krokiem (przedział i krok wczytywane ze standardowego wejścia). Wartości funkcji powinny być zaokrąglane do podanej przez użytkownika liczby miejsc po przecinku. 10. Napisz program generujący i wypisujący na ekranie N liczb losowych z przedziału 1-49. Wylosowane liczby nie powinny się powtarzać. Podpowiedź: wykorzystaj funkcję biblioteczną rand: http://www.cplusplus.com/reference/clibrary/cstdlib/rand/