tablice znakowe

background image

Łańcuch znakowy

• Łańcuch znakowy jest ciągiem składającym się z

jednego lub więcej znaków znaki cudzysłowu nie
są częścią łańcucha

• Język C nie posiada specjalnego typu

łańcuchowego. Zamiast tego łańcuchy są
przechowywane w tablicach zbudowanych z
elementów typu char

• kolejne znaki z których składa się łańcuch

znajdują się w kolejnych komórkach pamięci, a
tablica jest właśnie grupą sąsiadujących ze sobą
miejsc w pamięci – rozmieszczenie łańcucha w
tablicy jest całkiem naturalnym rozwiązaniem

background image

Tablice znakowe

Tablice znakowe: char nazwa[rozmiar]

dwa sposoby inicjalizacji:

char t[30] = {‘A’,’l’,’a’,’ ‘,’m’,’a’, ’ ’ ,‘k’,’o‘,’t‘,’a’};

kolejne bajty zawierają kolejne znaki tekstu

reszta wyzerowana

char t[30] = {”Ala ma kota”};

struktura pamięci będzie identyczna jednak w tym

wypadku z łańcucha jest też kopiowany bajt

zerowy !

W tablicy warto przechowywać rozmiar-1

znaków i dopełniać je bajtem zerowym a

wielokrotnie unikniemy problemów z

pamięcią !

background image

Łańcuch znakowy

A l

a

m a

k o t

a \0

• W ostatniej pozycji tablicy znajduje się znak \0 –

nie jest on cyfrą zero, jest on znakiem
niedrukowanym o kodzie równym 0

• tablica musi mieć długość przynajmniej o jedną

komórkę większą niż długość zapisanego w niej
łańcucha

background image

Funkcje operujące na łańcuchach

funkcja gets( )

• Przydatna w programach interaktywnych
• Pobiera łańcuch ze standardowego wejścia czyli

z klawiatury

• Ponieważ łańcuchy nie mają z góry określonej

długości gets() musi wiedzieć kiedy zakończyć
odczytywanie – pobiera znaki do napotkania
znaku nowej linii \n generowanego przez
wciśnięcie klawisza ENTER

• Pobiera znaki do znaku nowej linii (ale bez

niego), dodaje znak zerowy (\0) i przekazuje
łańcuch do programu – nie sprawdza, czy dane
się mieszczą

background image

Wczytanie łańcucha

funkcja fgets( )

• Pobiera łańcuch ze standardowego wejścia czyli

z klawiatury

Różni się od gets():

• pobiera drugi argument określający max liczbę

znaków do pobrania

• jeśli odczyta znak nowej linii pozostawia go w

łańcuchu w przeciwieństwie do gets(), która go
odrzuca

• pobiera trzeci argument określający plik, z

którego mają zostać pobrane dane

• aby wczytać dane z klawiatury trzeba użyć

argumentu stdin (standard input) – identyfikator
zdefiniowany w pliku stdio.h

background image

Wczytywanie łańcuchów

#include<stdio.h>
#define MAX 80

int main()
{
char imie[MAX]; /*przydzielenie miejsca */
printf("Jak masz na imie? \n");
gets(imie); /*umieszcza łańcuch w tablicy imie

*/

printf("Bardzo ładne imię %s\n",imie);
}

background image

Wyświetlanie łańcuchów

• Język C zawiera standardowe funkcje

biblioteczne służące do wyświetlania łańcuchów
– printf(), puts(), fputs()

puts()

Bardzo prosta w użyciu – wystarczy przekazać jej

adres łańcucha jako argument

zatrzymuje się w momencie napotkania znaku

zerowego – nusi się on znajdować na końcu

łańcucha

background image

wariant puts przystosowany do współpracy z plikami

Różnice:

• fputs() pobiera drugi argument określający plik,

do którego należy zapisać dane

• aby wyświetlić dane na ekranie należy użyć

argumentu stdout (standard output

• w przeciwieństwie do puts(), fputs() nie daje

znaku nowej linii

Wyświetlanie łańcuchów

fputs()

background image

Funkcje operujące na łańcuchach

Operacje na łańcuchach wymagają

specjalizowanych funkcji

void strcpy(cel, zrodlo) ;

• kopiuje łańcuch pod adres przechowywany

przez pierwszy parametr – powinien on
wskazywać na obiekt danych taki jak tablica,
posiadający wystarczającą ilość miejsca, aby
przechować łańcuch wyjściowy

• zwraca adres znaku – wartość jej pierwszego

argumentu

• pierwszy argument nie musi wcale wskazywać

na początek tablicy, co pozwala dołączyć drugi
łańcuch w dowolnym miejscu pierwszego

Biblioteki standardowe dostarczają wielu

funkcji pracujących na łańcuchach

background image

Funkcje operujące na łańcuchach

void strncpy(cel, zrodlo, n) ;

• Funkcja strcpy ma pewną wadę – nie sprawdza

zawczasu, czy łańcuch źródłowy zmieści się w
łańcuchu docelowym

• Bezpieczniejszy sposób kopiowania łańcuchów

udostępnia funkcja strncpy()

• Pobiera ona trzeci argument – maksymalną

liczbę znaków do skopiowania

background image

Funkcje operujące na łańcuchach

void strcmp() ;

• służy do porównywania zawartości łańcuchów a

nie ich adresów

• znaki są porównywane w oparciu o ich

reprezentację liczbową, czyli wartość ASCII

strcmp("A","a") zwraca wartość ujemną

• gdy liczba zwracana jest równa zera - łańcuchy

się zgadzają

• gdy liczba zwracana jest różna od zera -

łańcuchy nie są zgodne

background image

Funkcje operujące na łańcuchach

void strncmp() ;

• porównuje kolejne znaki łańcuchów do momentu

znalezienia znaków o różnych kodach lub do
momentu porównania ilości znaków określonej
przez trzeci argument

background image

Funkcje operujące na łańcuchach

strlen() -

zwraca długość łańcucha

getchar(), putchar()

zajmują się tylko znakami – są szybsze i

poręczniejsze od scanf() i printf()

getchar() –

zwraca kolejny znak z łańcucha

wejściowego

putchar() –

wyświetla na ekranie przekazany

jej argument


Document Outline


Wyszukiwarka

Podobne podstrony:
13,2x99 HOTCHKISS wz 30 tablica znakowan
Tablica znaków, Informatyka, Word
Tabliczki do znaków drogowych, znaki drogowe kierunku i miejscowości, tabliczki do znaków, znaki tab
Tabliczki do znaków drogowych
Rozporządzenie z 7 września 2015 w sprawie znaków i sygnałów drogowych zmiana (tabliczki)
Tablice Rozkład liczby znaków
tablice do analizy konkur
TABLICE
7 Znakowanie wartoscia odzywcza GDA 1
Tablice Trwania ZyciaKonstruowanie
Algorytmy i struktury danych Wykład 3 i 4 Tablice, rekordy i zbiory
Tabliczka mnożenia
F1 15 Tablica kodu ASCII
ODCHYŁKI NORMALNE Tablice

więcej podobnych podstron