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);