Wprowadzenie do tablic znaków (łańcuchów) w ANSI C

Podobne dokumenty
Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

ŁAŃCUCHY W JĘZYKU C/C++

Operacje na łańcuchach znaków

Programowanie Proceduralne

Podstawy programowania 1

Tablice deklaracja, reprezentacja wewnętrzna

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Wyklad 7 Funkcje (c.d.). Tablice jednowymiarowe znaków

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Podstawy programowania w języku C++

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Języki programowania obiektowego Nieobiektowe elementy języka C++

Podstawy programowania

Programowanie w C Typ wskaźnikowy do typu znakowego i operacje na łańcuchach

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Wprowadzenie do programowania w języku C

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF22

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF10Z

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

dr inż. Jarosław Forenc

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Podstawy Programowania

Stałe i zmienne znakowe. Stała znakowa: znak

Funkcje zawarte w bibliotece < io.h >

Pliki. Informacje ogólne. Obsługa plików w języku C

. Podstawy Programowania 1. Łańcuchy znaków. Arkadiusz Chrobot. 25 listopada 2015

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Funkcje zawarte w bibliotece < io.h >

Tablice, funkcje - wprowadzenie

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Pliki. Informacje ogólne. Obsługa plików w języku C

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2

1. Wprowadzanie danych z klawiatury funkcja scanf

Wstęp do wskaźników w języku ANSI C

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

2 Przygotował: mgr inż. Maciej Lasota

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Inicjacja tablicy jednowymiarowej

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

Podstawy programowania w języku C++

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Ghost in the machine

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Programowanie w językach wysokiego poziomu

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Bardzo szybkie podsumowanie: wykład 5

Wykład 6. Operacje na łańcuchach znakowych

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 11. Elektrotechnika, semestr II rok akademicki 2008/2009

Plik jest reprezentowany przez strumień znaków (bajtów) o zmiennej długości. Koniec strumienia identyfikowany jest znacznikiem końca pliku EOF.

Języki programowania. Karolina Mikulska-Rumińska Pokój 573, tel Konsultacje wtorek 9-10.

7 Przygotował: mgr inż. Maciej Lasota

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

Biblioteka standardowa - operacje wejścia/wyjścia

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

PARADYGMATY PROGRAMOWANIA Wykład 3

Zmienne, stałe i operatory

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Podstawy programowania skrót z wykładów:

Języki i metodyka programowania. Wprowadzenie do języka C

Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku

Podstawy programowania w języku C++

scanf( %s,tekst); //znaki podane z klawiatury (do pierwszego białego znaku ) //s kopiowane do zmiennej tekst i dostawiany jest znak \0

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

1 Przetwarzanie tablic znakowych

Argumenty wywołania programu, operacje na plikach

Języki i metody programowania I

Wskaźniki do funkcji. Wykład 11. Podstawy programowania ( język C ) Wskaźniki do funkcji (1) Wskaźniki do funkcji (2)

Podstawy programowania w języku C++

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wstęp do programowania

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Powyższe wyrażenie alokuje 200 lub 400 w zależności od rozmiaru int w danym systemie. Wskaźnik wskazuje na adres pierwszego bajtu pamięci.

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Uzupełnienie dot. przekazywania argumentów

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Reprezentacja symboli w komputerze. Znaki alfabetu i łańcuchy znakowe. Programowanie Proceduralne 1

Podstawy programowania w języku C++

Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE, ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

MATERIAŁY POMOCNICZE PODSTAWY PROGRAMOWANIA Na podstawie: Programowanie w C - Stworzone na Wikibooks, bibliotece wolny podręczników

Operacje wejścia/wyjścia odsłona pierwsza

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Transkrypt:

Wprowadzenie do tablic znaków (łańcuchów) w ANSI C Tablice znaków stanowią specjalny rodzaj tablic o budowie ułatwiającej przetwarzanie tekstów. Przetwarzanie obejmuje szereg operacji takich jak tworzenie, modyfikację i przeszukiwanie i konwersje tablicy znakowej na liczbę i liczby na tablicę znakową. Tablice znakowe mogą być definiowane w sposób następujący: main () { char s1[5]; char s2[5 ]="ABCD"; char s3[ ]="abcd"; } Definicje tablic s2 i s3 zawierają też inicjalizację. Tablice znaków zakończone są znakiem \0. Znak ten umożliwia wykrycie końca tablicy, a tym samym umożliwia traktowanie tablic znaków w nieco inny sposób niż zwykłych tablic. Budowa tablicy znaków Przykładowo, tablica s2 ma następującą budowę: 'A" 'B' 'C' 'D' '\0' Tak więc definiując tablicę należy przewidzieć jedną komórkę na znak końcowy '\0'. Stałe łańcuchowe i wskaźniki do znaków Stałe łańcuchowe (stałe typu tablica znaków), np. "Tekst", przechowywane są w pamięci jako tablice znaków z ostatnim elementem równym \0. Stala "Tekst" jest typu char *, czyli wskaźnik do znaku. Wskaźnik do znaku może więc zostać zainicjowany stałą łańcuchową char *ps="tekst"; // sposób 1 Inicjalizacja taka jest równoważna parze instrukcji char *ps; // sposób 2 ps="tekst"; W przypadku sposobu 1 do wskaźnika ps jest przypisywany wskaźnik do tablicy znaków, a nie do *ps ( czyli nie do miejsca wskazywanego przez ps).

Wczytywanie i drukowanie tablic znakowych cz.1 W języku C istnieje specjalny deskryptor formatu %s umożliwiający wczytywanie i drukowanie tablic znakowych przy użyciu funkcji scanf i printf, istnieją też funkcje biblioteczne realizujące te operacje. Jeśli zdefiniowano tablicę znakową char s1[5]; to można ją wczytać i wydrukować w poniższy sposób: printf("\ Podaj lancuch :"); scanf( %s,s1); /// nie stosuje się znaku & przed s2, gdyż s2 jest //wskaźnikiem. printf( \n Wczytany lancuch to :%s, s1); Jednak wczytywanie łańcuchów przy użyciu funkcji scanf nie pozwala na wczytanie łańcuchów zawierających spacje, gdyż wczytywanie łańcucha jest przerywane po napotkaniu spacji. Dla takich łańcuchów należy zastosować funkcję gets lub też funkcję fgets. Funkcja gets te ma następujący prototyp: char *gets(char *s); Opis działania funkcji gets: Funkcja wczytuje znaki ze standardowego wejścia ( stdin) aż do momentu napotkania znaku nowej linii (Enter). Wczytywane znaki są wyświetlane na ekranie i zapamiętywane począwszy od miejsca wskazywanego przez s. Znak nowej linii jest zastępowany w łańcuchu znakiem końca łańcucha '\0'. Ciąg wejściowy może zawierać pewne białe znaki (np. spacje i znaki tabulacji poziomej). Funkcja zwraca s, gdy operacja się powiodła, lub NULL w przypadku wystąpienia błędu. Długość wczytywanego ciągu znaków nie jest ograniczana, co przy ciągach dłuższych niż to wynika z rozmiaru argumentu funkcji gets, może powstać uszkodzenie sąsiednich obszarów pamięci. Przykład. Użycie funkcji gets do wczytywania tablicy znakowej. char lan [20]; printf ("\n Podaj lancuch:"); gets(lan); Bardziej uniwersalną funkcją służącą do wczytywania łańcuchów jest fgets. Funkcja fgets ma następujący prototyp: char *fgets(char *s, int n, FILE *stream);

Funkcja ta czyta do łańcucha s znaki ze strumienia wejściowego (pliku) określonego przez wskaźnik stream. Funkcja kończy wczytywanie znaków po przeczytaniu n - 1 znaków lub też po pojawieniu się znaku nowej linii. Funkcja wpisuje znak nowej linii do łańcucha. Funkcja zwraca łańcuch lub NULL w przypadku pojawienia się końca pliku lub błędu. Przykład. Wczytywanie tablicy znakowej ze standardowego strumienia wejściowego przy użyciu funkcji fgets. char lan [20]; printf ("\n Podaj lancuch:"); fgets(lan,15,stdin); Do drukowania tablic znakowych można zastosować funkcje puts i fputs. Prototyp funkcji puts ma postać int puts(const char *s); Funkcja wyprowadza łańcuch na wyjście standardowe (stdout) i dołącza znak nowej linii. W przypadku pomyślnej realizacji funkcja zwraca wartość nieujemną, w przeciwnym przypadku EOF. int fputs(const char *s, FILE *stream); Funkcja zapisuje łańcuch s do do strumienia wyjściowego określonego przez wskaźnik stream. Funkcja nie zapisuje do pliku znaku '\0'. W przypadku powodzenia operacji funkcja zwraca wartość nieujemną, w przypadku błędu wartość EOF. Opis funkcji operujących na łańcuchach znaków Poniżej przedstawiono krótkie opisy funkcji związanych z działaniami na tablicach znakowych w języku ANSI C. Poniżej będziemy zamiennie stosować terminy tablica znaków, tekst i łańcuch. Oznaczają one tutaj ten sam typ danych. Format oznacza dopuszczalną postać tablicy znakowej. 1. Plik stdlib.h double atof(const char *s) Przekształca tekst zawarty w s na wartość typu double, funkcja rozpoznaje wartość zmiennoprzecinkową reprezentowaną przez s. Funkcja rozpoznaje również wartość

nieskończoną, podczas działania tej funkcji pierwszy nierozpoznany znak kończy jej działanie. Format: [biały_znak] [znak] [ddd] [.] [ddd] [eie[znak]ddd]. int atoi (const char *s) Przekształca tekst zawarty w s na wartość typu int (wartość całkowitą), funkcja rozpoznaje tabulator i spację, znak oraz ciąg cyfr. Przepełnienie jest niezdefiniowane. Funkcja zwraca przekształconą wartość lub 0. Format: [biały_znak] [znak] [ddd]. long atol(const char *s) Przekształca tekst zawarty w s na wartość typu long. Działanie jest podobne do działania funkcji atoi z tą różnicą, że wartość zwracana jest typu long. Format: [biały_znak] [znak] [ddd]. double strtod(const char *s, char **endptr) Przekształca tekst zawarty w s na wartość typu double (podobnie jak atof), jeżeli argument wywołania odpowiadający parametrowi endptr jest różny od NULL, funkcja wstawia pod adres wskazany przez ten argument wskaźnik do dalszej części tekstu, która nie została przekształcona. Przepełnienie zwraca HUGE_VAL z odpowiednim znakiem. W przypadku niedomiaru zwracane jest 0. Format: [biały_znak] [znak] [ddd] [.] [ddd] [eie[znak]ddd]. long strtol (const char *s, char **endptr, int base). Przekształca tekst zawarty w s na wartość typu long (podobnie jak atol). Jeżeli argument wywołania odpowiadający parametrowi endptr jest różny od NULL, funkcja wstawia pod adres wskazany przez ten argument wskaźnik do dalszej części tekstu, która nie została przekształcona. Jeśli argument odpowiadający parametrowi base (podstawa systemu liczbowego) zawiera się w przedziale 2-36, to przekształcenia dokonuje się przy założeniu, że tekst wejściowy zawiera liczbę zapisaną przy tej podstawie. Gdy argument odpowiadający parametrowi base równa się 0, wówczas przyjmowana podstawa systemu liczbowego zależy od postaci liczby zapisanej w tekście s. Wtedy, jeżeli liczba rozpoczyna się 0, podstawą będzie 8, jeżeli 0x(lub 0X) podstawą będzie 16, a w pozostałych przypadkach 10. Przy nadmiarze zwracana jest wartość LONG_MAX lub LONG_MIN (zależnie od znaku). Format: [biały_znak] [znak] [0] [x] [ddd]

unsigned long strtoul (const char *s, char **endptr, int base) Przekształca tekst zawarty w s na wartość typu unsigned long (działa podobnie do funkcji strtol ) i w przypadku błędu zwraca wartość ULONG_MAX. Format: [biały_znak] [znak] [0] [x] [ddd] 2. Plik string.h W pliku tym zamieszczono deklaracje dwóch grup funkcji operujących na tablicach znaków. Pierwsza to funkcje, których nazwy rozpoczynają się od str, druga to funkcje o nazwach rozpoczynających się od mem. Funkcje, których nazwy rozpoczynają się od str to: strcpy, strncpy, strcat, strncat, strcmp, strncmp, strchr, strrchr, strspn, strcspn, strpbrk, strstr, strlen, strerror, strtok, strlwr, strupr. char strcpy (char *s, const char *ct)' Kopiuje zawartość tablicy znaków ct do tablicy s łącznie ze znakiem '\0'; zwraca s. Funkcja nie sprawdza długości tablicy, do której odbywa się kopiowanie, stąd tablica docelowa musi mieć miejsce na co najmniej n+ l znaków, gdzie n to ilość znaków w tablicy ct. char strncpy (char *s, const char *ct, size_t n) Kopiuje znaki z tablicy znaków ct do tablicy s, jednak nie więcej niż n znaków. Jeżeli w ct jest mniej niż n znaków, puste miejsce dopełniane jest znakami \0. Funkcja zwraca s. char strcat (char *s, const char *ct) Dopisuje znaki z tablicy znaków ct na koniec tablicy s, zwracane jest s. char strncat(char *s, const char *ct, size_t n) Dołącza co najwyżej n znaków z tablicy ct do końca tablicy s, tablica s kończy się znakiem '\0'. Funkcja zwraca s. char strcmp (const char *cs, const char *ct) Porównuje tablice znaków cs i ct. Zwracana jest: wartość <0 dla cs < ct

wartość 0 dla cs jest równego ct wartość >0 dla cs > ct. Porównywanie rozpoczyna się od pierwszego znaku obu tablic do momentu, gdy znaki będą się różnić lub do osiągnięcia końca jednej z tablic. Kryterium porównania jest wartość kodu ASCII danego znaku. char strncmp (const ch ar *cs, const char *ct) Funkcja ma podobne działanie jak funkcja poprzednia z tą różnicą, że porównywanych jest co najwyżej n znaków. char *strchr (const char *cs, int c) Zwraca wskaźnik do pierwszego wystąpienia znaku c w cs. w wypadku nie wystąpienia tego znaku zwracane jest NULL. char *strrchr (const char *cs, int c) Zwraca wskaźnik do ostatniego wystąpienia znaku c w tablicy cs. Jeśli znak nie występuje, zwracane jest NULL. size_t strspn (const char *cs, const ch ar *ct) Zwraca długość przedrostka w tablicy cs składającego się ze znaków występujących w tablicy ct. size_t strcspn (const char *cs, const char *ct) Działa podobnie jak poprzednia funkcja z tym, że zwraca długość przedrostka w cs składającego się ze znaków nie występujących w ct, funkcja przerywa zliczanie, gdy w cs napotka znak występujący w ct. char *strpbrk (const char *cs, const char *ct) Zwraca wskaźnik do pierwszego wystąpienia w tablicy cs któregokolwiek ze znaków z tablicy ct. W przypadku nie znalezienia żadnego znaku zwraca NULL. char *strstr (const char *cs, const char *ct) Zwraca wskaźnik do pierwszego wystąpienia cs w tablicy ct lub wartość NULL.

size_t strlen (const char *cs) Zwraca długość tablicy cs bez uwzględnienia końcowego znaku '\0'. char *strerror (size_t n) Zwraca wskaźnik do tekstu komunikatu odpowiadającemu błędowi o numerze n. Wywołana bez numeru wypisuje komunikat o ostatnim napotkanym błędzie. char *strtok (char *s, const ch ar *ct) Wyszukuje w tablicy s ciągi znaków przedzielone znakami z tablicy ct. Kolejne wywołania tej funkcji dzielą tablicę s na ciągi znaków rozdzielone znakami z tablicy ct. Funkcja po wywołaniu znajduje pierwszy ciąg znaków nie należących do ct. Znak następny zastępowany jest znakiem /0 i zwracany jest wskaźnik do początku tego ciągu. Każde następne wywołanie tej funkcji musi być z argumentem s równym NULL, wówczas zwracany jest kolejny ciąg znaków, przy czym szukanie rozpoczyna się za końcem poprzedniego ciągu. Zwraca NULL, gdy nie znajduje ciągów. Każde następne wywołanie może być z innym argumentem ct. char *strlwr(char *s); Zamienia w tablicy s litery duże na małe. Pozostałe znaki nie są zmieniane. Zwraca wskaźnik do s. char *strupr(char *s); Zamienia w tablicy s litery małe na duże. Pozostałe znaki nie są zmieniane. Zwraca wskaźnik do s. Funkcje mem Funkcje te to memcpy, memmove, memcmp, memchr, memset. void *memcpy (void *s, const void *ct, size_t n) Kopiuje n znaków z obiektu ct do obiektu s i zwraca s. void *memmove (void *s, const void *ct, size_t n) Wstawia n znaków z obiektu ct do obiektu s i zwraca s. Różni się od memcpy tym, że pozostawia w obiekcie s jego końcową część, jeżeli obiekt s ma większą długość niż obiekt ct.

int memcmp (void const *cs, const void *ct, size_t n) Porównuje początkowe n znaków zawartych w obiektach ct i cs. Zasada porównywania jest taka sama jak dla funkcji strcmp. Zwracana jest: wartość <0 dla cs < ct wartość 0 dla cs równego ct wartość >0 dla cs > ct. ~ void *memchr (void const *cs, int c, size_t n) Zwraca wskaźnik do pierwszego wystąpienia znaku c w obiekcie cs lub wartość NULL, gdy znaku c. Sprawdza tylko n początkowych znaków. void *memset (void *s, int c, size_t n) Wstawia znak c do początkowych n znaków obiektu s. Zwracane jest s. // Uzupełnić program o wywołania funkcji z <stdlib.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <stdio.h> #include <errno.h> int main (int argc, char* argv[ ]) { int i=0,w,dl,ilosc; char *lancuch0 = "AAAAAA"; char *lancuch1 = "BBBBBBB"; char *lancuch2 = "CCCCCCCAAA"; char *lancuch3 = "DDDDDDDDDBBB"; char *lancuch4= "EEEEEEEEEE"; char *lancuch5="fffffffff"; char *string1 = "123CD4567890"; char *string2 = "123DC8";

char *lancuch1_1 = "AAA BBB CCC 123 456"; char *lancuch2_2 = " "; char *lancuch3_3 = "AAABBBcCC"; char *bufor; char *wskaznik, znak = 'c'; char *wsk1 = "aaabbbccc", *wsk2 = "bbbccc", *wsk3 = "cccddd"; char kopia[40]; char kopia_n[40]="abcdefghikl"; char kopia_1[40]; char kopia_5[40]; char zmienna1[50],zmienna2[50],zmienna3[50]; printf("\n\n\tdzialanie funkcji strcpy :"); printf("\n\n Wywolanie strcpy(kopia, lancuch0) powoduje skopiowanie tablicy znakowej"); printf("\n lancuch0 do tablicy kopia"); strcpy(kopia, lancuch0); printf("\n\n Po skopiowaniu lancuch0=%s kopia=%s", lancuch0,kopia); printf("\n\n\tdzialanie funkcji strncpy dla kopiowania 5 znakow"); printf("\n\n Wywolanie stnrcpy(kopia, lancuch0) powoduje skopiowanie 5 pierwszych"); printf ("\n znakow z lancuch0 do kopia_5"); strncpy(kopia_5, lancuch0,5); kopia_5[5]='\0'; printf("\n\n Po skopiowaniu lancuch0 =%s kopia_5=%s", lancuch0,kopia_5); printf("\n\n\tdzialanie funkcji strcat"); printf("\n\n Funkcja skleja lancuch0 z kopia_n");

printf ("\n\n Przed sklejeniem kopia_n=%s lancuch0=%s",kopia_n, lancuch0) ; strcat(kopia_n, lancuch0 ); printf ("\n\n Po sklejeniu kopia_n=%s", kopia_n) ; printf("\n\n\tdzialanie funkcji strcmp"); printf("\n\n Funkcja porownuje leksykograficznie dwa lancuchy"); printf("\n\n wsk1=%s wsk2= %s",wsk1, wsk2); w = strcmp(wsk2, wsk1); if (w > 0) printf("\n\n wsk2 > wsk1"); if (w==0) printf ("\n\n wsk2 = wsk1") ; if (w < 0) printf("\n\n wsk2 < wsk1"); printf ("\n\n\tdzialanie funkcji strncmp dla 5 znakow"); printf ("\n\n Funkcja porownuje pierwsze 5 znakow swoich argumentow"); printf("\n \n wsk1 = %s wsk2 = %s",wsk1,wsk2); w = strncmp(wsk2, wsk1, 5); if (w > 0) printf("\n wsk2 > wsk1"); if (w==0) printf ("\n wsk2 = wsk1") ; if (w < 0) printf("\n wsk2 < wsk1"); printf("\n\n\tdzialanie funkcji strchr"); printf("\n\n Funkcja wyszukuje zadany znak w tablicy znakow"); wskaznik = strchr(wsk1, znak);

printf("\n\n Znak %c jest w %s na pozycji: %d", znak, wsk1, wskaznik - wsk1+1); printf ("\n\n\tdzialanie funkcji strspn"); printf("\n\n Wywolanie ilosc=strspn (string1,string2)"); printf("\n Funkcja wyznacza ilosc poczatkowych znakow ze lancucha string1"); printf("\n ktore wystepuja w lancuchu string2" ); printf("\n\n Lancuch1=%s Lancuch2-%s ", string1,string2); ilosc = strspn(string1, string2); printf("\n\n I1osc poczatkowych znakow z lancucha2 w lancuchu 1 to %d", ilosc); printf( "\n\n\tdzialanie funkcji strpbrk "); printf("\n\n Funkcja poszukuje w jednym lancuchu pierwszego wystapienia"); printf("\n znaku z drugiego lancucha"); printf("\n\n Lancuch1=%s Lancuch2=%s ", lancuch0,lancuch2); wskaznik =(char *) strpbrk(lancuch0,lancuch2); printf ("\n\n Pierwsze wystapienie znaku na pozycji %d", wskaznik-lancuch0); printf ("\n\n\tdzialanie funkcji strstr "); wskaznik = strstr(lancuch1,lancuch3); printf("\n\n Pierwsze wystapienie tekstu =%s", wskaznik); printf("\n\n\tdzialanie funkcji strlen "); dl = strlen(lancuch1); printf ("\n\n Dlugosc lancucha %d", dl);

printf("\n\n\tdzialanie funkcji strerror \n\n"); errno=enofile ; bufor = strerror(errno); printf("\n Komunikat bledu dla nr bledu %d= %s", errno,bufor); printf("\n\n\tdzialanie funkcji strtok"); printf("\n\n Wyszukuje w lancuchu1_1 ciagi znakow rozdzielone znakami z lancucha 2_2"); printf("\n lancuch1_1 = %s lancuch2_2 = spacja",lancuch1_1); wskaznik = strtok(lancuch1_1,lancuch2_2); if(wskaznik) printf ("\n Wywolanie nr 0=%s", wskaznik); while(wskaznik) { wskaznik = strtok (NULL," "); printf("\n Wywolanie nr %d=%s",++i,wskaznik); if(i>5) break; } printf("\n\n\tdzialanie funkcji memcpy \n\n"); printf("\n\n Funkcja kopiuje zadana liczbe bajtow z jednej lokalizacji"); printf("\n do drugiej"); memcpy(kopia,lancuch1,strlen(lancuch1+1)); printf("\n\n Skopiowane znaki z tekstu bazowego =%s", kopia); printf ("\n\n\tdzialanie funkcji mmmove \n\n");

printf("\n\n Funkcja przenosi (kopiuje) zadana liczbe bajtow z jednej lokalizacji"); printf("\n do drugiej, bloki moga sie pokrywac"); memmove(kopia,lancuch0,strlen(lancuch0)); //bufor = (char *) printf ("\n\n Przeniesione znaki z tekstu bazowego=%s", kopia); printf ("\n\n\tdzialanie funkcji memcmp ") ; printf("\n\n Funkcja porownuje zadana liczbe bajtow z dwoch lokalizacji"); printf("\n wsk1 = %s wsk2 = %s",wsk1,wsk2); w = memcmp(wsk2, wsk1,strlen(wsk2)); if (w > 0) printf("\n wsk2 > wsk1"); if (w==0) printf ("\n wsk2 = wsk1") ; if (w < 0) printf("\n wsk2 < wsk1"); printf ("\n\n\tdzialanie funkcji memchr"); printf("\n\n Funkcja poszukuje zadanego znaku w bloku pamieci"); printf("\n zwraca wskaznik do pierwszego wystapienia znaku"); bufor = (char *)memchr(lancuch3_3,znak,strlen(lancuch3_3)); printf ("\n\n Znak %c wystepuje w tekscie bazowym %s na pozycji o indeksie=%d",znak, lancuch3_3,bufor-lancuch3_3); printf("\n\n\tdzialanie funkcji memset "); printf("\n\n Funkcja nadaje n pierwszym znakom bloku pamieci zadana wartosc "); printf ("\n\n Lancuch przed wstawieniem=%s", lancuch3_3);

bufor = (char *)memset( (char *)lancuch3_3,znak,strlen(lancuch3_3)-1); printf ("\n\n Lancuch po wstawieniu=%s", bufor); return 0;}