PDF, 94 kB
Transkrypt
PDF, 94 kB
Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 2/17 Łańcuchy znaków w C Informatyka 1 Łańcuch znaków (ciąg znaków, napis, C-string) – ciąg złożony z zera lub większej liczby znaków zawartych między znakami cudzysłowu Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne I stopnia Rok akademicki 2015/2016 "Pies" Implementacja - tablica, której elementami są pojedyncze znaki (typ char) Pracownia nr 15 (13/14.06.2016)) (13/14.06.2016 dr inż. Jarosław Forenc Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 Ostatni znak (\0, liczba zero) oznacza koniec napisu dr inż. Jarosław Forenc 3/17 Łańcuchy znaków w C W rzeczywistości w tablicy zamiast znaków przechowywane są odpowiadające im kody ASCII Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 4/17 Łańcuchy znaków w C - deklaracja Deklaracja zmiennej przechowującej napis char nazwa_zmiennej[rozmiar]; Przykład: chat txt[10]; Tablica txt może przechowywać napisy o maksymalnej długości do 9 znaków Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 5/17 Łańcuchy znaków w C - inicjalizacja Inicjalizacja łańcucha znaków dr inż. Jarosław Forenc 6/17 Łańcuchy znaków w C Inicjalizacja możliwa jest tylko przy deklaracji char txt[10]; txt = ”Pies”; /* BŁĄD!!! */ char txt1[10] = "Pies"; char txt2[10] = {'P','i','e','s'}; char txt3[10] = {80,105,101,115}; Pozostałe elementy tablicy otrzymują wartość zero Przypisanie zmiennej txt wartości ”Pies” wymaga zastosowania funkcji strcpy() z pliku nagłówkowego string.h char txt[10]; strcpy(txt,”Pies”); char txt4[] = "Pies"; char *txt5 = "Pies"; Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 7/17 Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 8/17 Łańcuchy znaków w C – string.h Łańcuchy znaków w C – string.h strcpy() strcmp() char *strcpy(char *s1, const char *s2); Kopiuje łańcuch s2 do łańcucha s1 strlen() size_t strlen(const char *s); Zwraca długość łańcucha znaków, nie uwzględnia znaku ’\0’ strcat() char *strcat(char *s1, const char *s2); Dołącza do łańcucha s1 łańcuch s2 int strcmp(const char *s1, const char *s2); Porównuje łańcuchy s1 i s2 z rozróżnianiem wielkości liter strcmpi() int strcmpi(const char *s1, const char *s2); Porównuje łańcuchy s1 i s2 bez rozróżniania wielkości liter strchr() char *strchr(const char *s, int c); Szuka w łańcuchu s znaku c Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 9/17 Łańcuchy znaków w C – string.h strlwr() Przykład – string.h char *strupr(char *s); int main(void) { char napis1[] = "Tekst w buforze", napis2[20]; printf("napis1: %s \n",napis1); int dlugosc = strlen(napis1); printf("liczba znakow w napis1: %d \n",dlugosc); strcpy(napis2,napis1); printf("napis2: %s \n",napis2); strrev(napis2); printf("napis2 (odwrocony): %s \n",napis2); return 0; Zamienia w łańcuchu s litery małe na wielkie strrev() dr inż. Jarosław Forenc 10/17 #include <stdio.h> #include <string.h> char *strlwr(char *s); Zamienia w łańcuchu s wielkie litery na małe strupr() Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 char *strrev(char *s); Odwraca kolejność znaków w łańcuchu s } Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 11/17 Przykład – string.h #include <stdio.h> #include <string.h> napis1: Tekst w buforze liczba znakow w napis1: 15 napis2: Tekst w buforze napis2 (odwrocony): ezrofub w tskeT int main(void) { char napis1[] = "Tekst w buforze", napis2[20]; printf("napis1: %s \n",napis1); int dlugosc = strlen(napis1); printf("liczba znakow w napis1: %d \n",dlugosc); strcpy(napis2,napis1); printf("napis2: %s \n",napis2); strrev(napis2); printf("napis2 (odwrocony): %s \n",napis2); return 0; } Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 12/17 Standardowe wejściewejście-wyjście w C znakowe getc() - putc() getchar() - putchar() fgetc() - fputc() ungetc() sformatowane scanf() - printf() fscanf() - fprintf() sscanf() - sprintf() łańcuchowe gets() - puts() fgets() - fputs() rekordowe (blokowe) fread() - fwrite() fgetpos() - fsetpos() fseek() ftell() rewind() Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 13/17 Wyświetlenie i wczytanie tekstu Wyświetlenie tekstu funkcją printf() wymaga specyfikatora formatu %s Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 14/17 Wyświetlenie i wczytanie tekstu Funkcja scanf() kończy wczytywanie danych po wystąpieniu pierwszej spacji, tabulacji lub entera W przypadku wprowadzenia tekstu ”To jest napis”, funkcja scanf() zapamięta tylko wyraz ”To” char napis[15] = ”Jan Kowalski”; printf(”Osoba: %s\n”, napis); Zapamiętanie całego wiersza tekstu (do naciśnięcia klawisza enter) wymaga użycia funkcji gets() Wczytanie tekstu funkcją scanf() char napis[15]; scanf(”%s”, napis); char napis[15]; gets(napis); brak znaku & Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 Macierz znaków typu char char txt[3][15] = {"Programowanie", "nie jest", "trudne"}; dr inż. Jarosław Forenc 15/17 Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 16/17 Macierz znaków typu char char txt[3][15] = {"Programowanie", "nie jest", "trudne"}; for (int i=0; i<3; i++) printf("%s ",txt[i]); Programowanie nie jest trudne Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2015/2016, Pracownia nr 15 dr inż. Jarosław Forenc 17/17 Stała znakowa Stałą znakową tworzy jeden znak ujęty w apostrofy, np. ’X’ Stała znakowa jest to liczba całkowita, której wartością jest kod ASCII znaku Do wyświetlenia stałej znakowej stosowany jest specyfikator formatu %c char znak = ’X’; printf(”%c”, znak);