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/