Programowanie Proceduralne



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

Programowanie Proceduralne

Podstawy Programowania

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

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

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

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

Podstawy programowania 1

Podstawy programowania w języku C++

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

Tablice deklaracja, reprezentacja wewnętrzna

Podstawy programowania

dr inż. Jarosław Forenc

Operacje na łańcuchach znaków

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

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

Programowanie Proceduralne

Wprowadzenie do programowania w języku C

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

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

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

Wstęp do programowania 1

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

Łańcuchy znaków. Agnieszka Nowak - Brzezińska

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

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

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

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

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

Podstawy programowania w języku C++

Funkcje zawarte w bibliotece < io.h >

Tablice, funkcje - wprowadzenie

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

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

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

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

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

Funkcje zawarte w bibliotece < io.h >

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

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

PARADYGMATY PROGRAMOWANIA Wykład 3

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

Podstawy Programowania

Podstawy Programowania. Przetwarzanie napisów, drzewa binarne

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

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

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

Podstawy Programowania. Przetwarzanie napisów, drzewa binarne

Programowanie w językach wysokiego poziomu

Informatyka. Wy-03 Dynamiczna alokacja pamięci, wyjątki. mgr inż. Krzysztof Kołodziejczyk

Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński

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

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.

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

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

Języki i metody programowania I

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

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

Podstawy programowania w języku C++

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

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

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Podstawy programowania w języku C++

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

Podstawy programowania w języku C++

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

PODSTAW PROGRAMOWANIA WYKŁAD 6 WSKAŹNIKI

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

1 Przetwarzanie tablic znakowych

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

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

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

Struktury czyli rekordy w C/C++

Struktury. Przykład W8_1

Programowanie Proceduralne

Podstawy programowania w języku C++

Inicjacja tablicy jednowymiarowej

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

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

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

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

"Pies" P i e s \0. Prawidłowy zapis wymaga wykorzystania funkcji strcpy() z pliku nagłówkowego string.h: char txt[10]; strcpy(txt, Pies );

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

Reprezentacja symboli w komputerze.

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

Programowanie Procedurale. Pliki w języku C++

Pobieranie argumentów wiersza polecenia

Wskaźniki. Programowanie Proceduralne 1

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Wprowadzenie do programowania w języku C

Podstawy Programowania.

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

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

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

Tablice. int rozmiar; cout << Jaki ma być rozmiar tabeli? ; cin >> rozmiar; { int tablica[rozmiar]; /* TU JEST ŹLE */... }

Struktura programu. Słowa kluczowe. Komentarze. Zmienne

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

JĘZYK C - TABLICE DWUWYMIAROWE,

Język ANSI C. część 11. Jarosław Gramacki Instytut Informatyki i Elektroniki

Reprezentacja symboli w komputerze.

Transkrypt:

Programowanie Proceduralne Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 7

strlen size_t strlen(char const *s); Oblicza długość napisu wskazywanego przez s Przykładowy program: #include <stdio.h> #include <string.h> int main(void) { char* pmsg = "Linux is fun!"; printf("%d : %s\n", strlen(pmsg), pmsg); char amsg[] = "Linux is fun!"; printf("%d : %s\n", strlen(amsg), amsg); return 0; }

Przykładowy program - wynik 14 : Linux is fun! 14 : Linux is fun!

strcpy char* strcpy(char* t, char const* s); Kopiuje Łańccuch znaków wskazywany przez s (łacznie ze znakiem NULL) do tablicy wskazywanej przez t. Łańcuchy nie moga na siebie nachodzić. Łańcuch docelowy t musi być wystarczajaco długi, aby zmieścić kopię s. Funkcja strcpy zwraca wskaźnik do łańcucha docelowego t.

strcpy() - Przykładowy program #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char* s = "Linux is fun!"; printf("%d : %s\n", strlen(s), s); char* t = calloc(strlen(s)+1, sizeof(char)); printf("%d : %s\n", strlen(t), t); strcpy(t, s); printf("%d : %s\n", strlen(t), t); free(t); return 0; }

Przykładowy program - wynik 14 : Linux is fun! 0 : 14 : Linux is fun!

strncpy char* strncpy(char* t, char const* s, size_t n); Kopiuje co najwyżej n znaków z łańcucha wskazywanego przez s do tablicy wskazywanej przez t. Jeżeli wśród pierwszych n znakółw łańcucha s nie będzie znaku NULL, łańcuch t nie będzie zakończony znakiem NULL. Jeżeli długość s jest mniejsza niż n, to reszta tablicy t zostanie wypełniona znakiem NULL. Funkcja strncpy zwraca wskaźnik do łańcucha docelowego t

strncpy() - Przykładowy program #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char* s = "This program is free software!"; printf("%d : %s\n", strlen(s), s); int n = 10; char* t = calloc(n, sizeof(char)); strncpy(t, s, n - 1); t[n - 1] = \0 ; // polecane!!! printf("%d : %s\n", strlen(t), t); strncpy(t, s, n); t[n - 1] = \0 ; // konieczne!!! printf("%d : %s\n", strlen(t), t); return 0; }

Przykładowy program - wynik 31 : This program is free software! 9 : This prog 9 : This prog

strncpy() - Przykładowy program #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char* s = "This program is free software!"; printf("%d : %s\n", strlen(s), s); int n = 10; char* t = calloc(n, sizeof(char)); strncpy(t, s, n - 1); // t[n - 1] = \0 ; // polecane!!! printf("%d : %s\n", strlen(t), t); strncpy(t, s, n); // t[n - 1] = \0 ; // konieczne!!! printf("%d : %s\n", strlen(t), t); return 0; }

Przykładowy program - wynik 31 : This program is free software! 9 : This prog 10 : This progr

strcat char* strcat(char* t, char const* s); Dołancza łańcuch znaków wskazywany przez s do łańcucha wskazywanego przez t. Łańcuchy nie moga na siebie nachodzić. Łańcuch docelowy t musi być wystarczająco długi, aby zmieścić wynik. Funkcja strcat zwraca wskaźnik do łańcucha docelowego t. char* strncat(char* t, char const* s, size_t n); Dołancza co najwyżej n znaków z łańcucha wskazywanego przez s do łańcucha wskazywanego przez t.

strcat() - Przykładowy program #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char* s1 = "Linux is fun, "; char* s2 = "Slackware more fun, "; char* s3 = "so have fun!"; char* t = calloc(strlen(s1) + strlen(s2) + strlen(s3) + 1, sizeof(char)); strcpy(t, ""); strcat(t, s1); strcat(t, s2); strcat(t, s3); printf("%d : %s\n", strlen(t), t); free(t); return 0; }

Przykładowy program - wynik 46 : Linux is fun, Slackware more fun, so have fun!

strcat() - Przykładowy program #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char* s1 = "Linux is fun, "; char* s2 = "Slackware more fun, "; char* s3 = "so have fun!"; char* t = calloc(strlen(s1) + strlen(s2) + strlen(s3) + 1, sizeof(char)); strcat(strcat(strcpy(t, s1), s2), s3); // mniej czytelne!!! printf("%d : %s\n", strlen(t), t); free(t); return 0; }

Przykładowy program - wynik 46 : Linux is fun, Slackware more fun, so have fun!

strchr char *strchr(const char *s, int c); Funkcja zwraca wskaźnik do pierwszego wysta pienia znaku c w łańcuchu s, lub NULL jeśli znaku c nie ma w łańcuchu s. char *strrchr(const char *s, int c); Funkcja zwraca wskaźnik do ostatniego wysta pienia znaku c w łańcuchu s, lub NULL jeśli znaku c nie ma w łańcuchu s.

strrchr() - Przykładowy program 1 #include <stdio.h> #include <string.h> int main (void) { char str[] = "This is a sample string"; char *pch, ch; puts("podaj znak: "); scanf("%c",&ch); pch=strrchr(str,ch); if (pch) printf ("Ostatnie wystapienie %c w \"%s\" zostalo znalezione na pozycji %d \n",ch,str,pch-str+1); else printf ("Znaku %c nie ma w \"%s\" \n",ch,str); return 0; }

Przykładowy program - wynik Podaj znak: a Ostatnie wystapienie a w "This is a sample string" zostalo znalezione na pozycji 12 Podaj znak: i Ostatnie wystapienie i w "This is a sample string" zostalo znalezione na pozycji 21 Podaj znak: b Znaku b nie ma w "This is a sample string"

fgets char *fgets(char *s, int size, FILE *stream); Funkcja czyta co najmniej size znaków ze strumienia stream i umieszcza je w buforze wskazywanym prze s. Funkcja kończy czytanie po wczytaniu znaku nowej lini lub znaku EOF. Jeśli nowa linia zostaje przeczytana, to pozostaje on w buforze. Znak \0 jest dopisywany za ostatnim przeczytanmy znakiem.

fgets() - Przykładowy program #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char *s1 = "Hello ", *s2 = "! How are you?\n"; int const maxlen = 64; char name[maxlen]; printf("podaj swoje imie i nazwisko : \n"); fgets(name, maxlen, stdin); char* p = strchr(name, \n ); if (p!= NULL) { *p = \0 ; } int const n = strlen(s1) + strlen(name) + strlen(s2) + 1; char* t = calloc(n, sizeof(char)); strcat(strcat(strcpy(t, s1), name), s2); printf("\n%s\n", t); free(t); return 0; }

Przykładowy program - wynik Podaj swoje imie i nazwisko : Jan Kowalski i Bozena Wozna Hello Jan Kowalski i Bozena Wozna! How are you?

char* strchr(char const* s, int c); Zwraca wskaźnik do pierwszego wystapienia znaku c w łańcuchu s char* strrchr(char const* s, int c); Zwraca wskaźnik do ostatniego wystapienia znaku c w łańcuchu s char* strpbrk(char const* s, char const* accept; Zwraca wskaźnik do pierwszego wystapienia dowolnego znaku z łańcucha accept w łańcuchu s.

strpbrk() - Przykładowy program 1 #include<string.h> #include<stdio.h> int main(void) { char string[]="welcome in AJD!"; char *string_ptr; printf("old string is \"%s\".\n",string); while((string_ptr=strpbrk(string," "))!=NULL) *string_ptr= - ; printf("new string is \"%s\".\n",string); return 0; }

Przykładowy program - wynik Old string is "Welcome in AJD!". New string is "Welcome-in-AJD-!".

strpbrk() - Przykładowy program 2 #include <stdio.h> #include <string.h> int main (void) { char str[] = "This is a sample string"; char key[] = "aeiou"; char * pch; printf ("Vowels in %s : ",str); pch = strpbrk (str, key); while (pch!= NULL){ printf ("%c ", *pch); pch = strpbrk (pch+1,key); } printf ("\n"); return 0; }

Przykładowy program - wynik Vowels in This is a sample string : i i a a e i

strcmp, strncmp int strcmp(char const * s1, char const* s2); Porównuje łańcuch s1 z łańcuchem s2 Zwraca liczbę < 0, jeżeli s1 < s2 Zwraca 0, jeżeli s1 == s2 Zwraca liczbę > 0, jeżeli s1 > s2 int strncmp(char const * s1, char const* s2, size_t n); Porównuje co najwyżej n poczakowych znaków z łańcuchów s1 i s2. Zwraca takie same wartości jak funkcja strcmp.

strcmp() - Przykładowy program #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int const Rozmiar=512; char s[rozmiar], t[rozmiar]; puts("podaj pierwsze zdanie"); fgets(s,rozmiar,stdin); char *p=strchr(s, \n ); *p= \0 ; puts("podaj drugie zdanie"); fgets(t,rozmiar,stdin); p=strchr(t, \n ); *p= \0 ; int n=strcmp(s,t); if (n==0){ printf("%s = %s\n", s, t); } if (n>0){ printf("%s > %s\n", s, t); } if (n<0){ printf("%s < %s\n", s, t); } return 0; }

Przykładowy program - wynik Podaj pierwsze zdanie Jan Kowalski Podaj drugie zdanie Jan Kowalski Jan Kowalski = Jan Kowalski Podaj pierwsze zdanie Czestochowa Podaj drugie zdanie Warszawa Czestochowa < Warszawa Podaj pierwsze zdanie Polska Podaj drugie zdanie Anglia Polska > Anglia

strcmp() - Przykładowy program #include <stdio.h> #include <string.h> int main(void) { char szkey[] = "apple"; char szinput[80]; do { printf ("Which is my favourite fruit? "); gets (szinput); } while (strcmp (szkey,szinput)!= 0); printf ("Correct answer!\n"); return 0; }

Przykładowy program - wynik Which is my favourite fruit? orange Which is my favourite fruit? apple Correct answer!

strstr char* strstr(char const * haystack, char const* needle); Znajduje pierwsze wystapienie podłańcucha needle w łańcuchu haystack. Kończace znaki NULL nie sa porównywane. Zwraca wskaźnik do poczatku podłańcucha, jeżeli podłańcuch został znaleziony. Zwraca wskaźnik NULL, jeżli podłańcuch nie został znaleziony.

strstr() - Przykładowy program char* strrstr(char const* haystack, char const* needle) { char *last, *current; // Inicjalizacja wskaznika dla ostatniego znalezionego wystąpienia. last = NULL; // Wyszukiwanie tylko wtedy, gdy drugi ciag nie jest pusty. // Jezeli ciag needle jest pusty, funkcja zwraca NULL. if (*needle!= \0 ) { current = strstr(haystack, needle); // Za kazdym znalezieniem ciagu zapamietaj wskaznik //do jego poczatku // Nastepnie szukaj nastepnego wystapienia ciagu. while (current!= NULL) { last = current; current = strstr(last + 1, needle); } } return last; }

strstr() - Przykładowy program #include <stdio.h> #include <stdlib.h> #include <string.h> char* strrstr(char const* haystack, char const* needle); int main(void){ char *s = "Linux is cool! Linux is fun! Linux is the best!"; char *t = "Linux"; char *w = strstr(s,t); puts (s); puts (t); puts (w); w = strrstr(s,t); puts (w); return 0; } char* strrstr(char const* haystack, char const* needle) { // definicja z poprzedniego slajdu }

Przykładowy program - wynik Linux is cool! Linux is fun! Linux is the best! Linux Linux is cool! Linux is fun! Linux is the best! Linux is the best!