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



Podobne dokumenty
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

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

dr inż. Jarosław Forenc

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

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

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

JĘZYK C - TABLICE DWUWYMIAROWE,

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

Ć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

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

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

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

Wstęp do MS ACCESS. 1. Wprowadzenie

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

Programowanie Proceduralne

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 11

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

Programowanie strukturalne i obiektowe

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Podstawy programowania w języku C++

Tworzenie kwerend. Nazwisko Imię Nr indeksu Ocena

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

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

Tablice (jedno i wielowymiarowe), łańcuchy znaków

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 7

Podstawy programowania

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

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

imię kod ulica prześlij Dzięki formularzom możliwe jest pobieranie danych, a nie tylko ich wyświetlanie.

Podstawy programowania 1

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Tablice deklaracja, reprezentacja wewnętrzna

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 8

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

Struktury czyli rekordy w C/C++

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

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

Języki i metody programowania I

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

Inicjacja tablicy jednowymiarowej

Bożena Czyż-Bortowska, Biblioteka Pedagogiczna w Toruniu

Operacje na łańcuchach znaków

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

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

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

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

2 Przygotował: mgr inż. Maciej Lasota

Zintegrowany system obsługi przedsiębiorstwa. Migracja do Firebird 2.x

Biblioteka standardowa - operacje wejścia/wyjścia

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

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

Zmienne, stałe i operatory

System CDN OPT!MA v Generator Raportów (GenRap) Kraków, Al. Jana Pawła II 41g tel. (12) , fax (12)

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

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

Tablice, funkcje - wprowadzenie

Podstawy Programowania

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

Wprowadzenie do programowania w języku C

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

KURS C/C++ WYKŁAD 1. Pierwszy program

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

KURS C/C++ WYKŁAD 6. Wskaźniki

Struktury, unie, formatowanie, wskaźniki

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

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

Programowanie w językach wysokiego poziomu

Funkcje zawarte w bibliotece < io.h >

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

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 10

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

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

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

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

stworzyliśmy najlepsze rozwiązania do projektowania organizacji ruchu Dołącz do naszych zadowolonych użytkowników!

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

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

Podstawy programowania w języku C++

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

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

Funkcje zawarte w bibliotece < io.h >

KURS C/C++ WYKŁAD 7. struct Punkt { int x, y; int kolor; };

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

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Podstawy programowania w języku C++

Podstawy programowania w języku C++

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

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Poprawiono wyświetlanie się informacji o nowych wiadomościach w przypadku, gdy wiadomość została przeczytana.

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

Język C zajęcia nr 11. Funkcje

Katalog książek cz. 1

Instrukcja użytkownika

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

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

Komunikacja szeregowa UART:

Transkrypt:

Łańcuchy znaków MATERIAŁY POMOCNICZE NR 7 DO PRACOWNII Z PRZEMIOTU INFORMATYKA 1 Łańcuch znaków (napis, stała napiswa) jest t ciąg złŝny z zera lub większej liczby znaków zawartych między znakami cudzysłwu, np. napis - znaki cudzysłwu nie są częścią napisu, słuŝą jedynie d kreślenia jeg granic, W rzeczywistści łańcuch znaków jest tablicą, której elementami są pjedyncze znaki (tablica elementów typu char). Ostatnim elementem tablicy jest znak kdzie 0 (stała liczbwa 0 lub stała znakwa \0 ), znaczający kniec napisu. Większść funkcji standardwych języka C ddaje autmatycznie na kńcu ten znak. "Pies" P i e s \0 Rzmiar fizycznej pamięci przeznacznej na napis musi być jeden większy niŝ liczba znaków zawartych między znakami cudzysłwu. Deklaracja zmiennej mgącej przechwywać napis jest pdbna d deklaracji zwykłej tablicy: typ zmienna[rzmiar]; char txt[20]; - deklaracja tablicy, w której mŝna przechwywać napisy max. długści d 19 znaków. Inicjalizacja łańcucha znaków Deklarując łańcuch znaków mŝemy nadać mu wartść pczątkwą, np. char txt[10] = Pies ; P i e s \0 \0 \0 \0 \0 \0 pzstałym elementm tablicy przypisywana jest wartść zer T sam mŝna uzyskać pdając pjedyncze litery umieszczne w apstrfach, np. char txt[10] = P, i, e, s Deklarując napis mŝna nie kreślać jeg długści, kmpilatr przydzieli wtedy autmatycznie dpwiedni rzmiar pamięci (uwzględniając statni znak \0 ), np. char *txt = T jest napis ; lub char txt[] = T jest napis ; W pwyŝszy spsób mŝna nadawać wartść łańcuchwi znaków tylk przy jeg deklaracji. Błędnym zatem jest pniŝszy zapis: char txt[10]; txt = Pies ; - taki zapis jest niepprawny. Infrmatyka 1 - Pracwnia Strna 1 z 9 2009 Jarsław Frenc Prawidłwy zapis wymaga wykrzystania funkcji strcpy() z pliku nagłówkweg string.h: char txt[10]; strcpy(txt, Pies ); Stała znakwa Stała znakwa jest t liczba całkwita. Taką stałą twrzy jeden znak ujęty w apstrfy, np. x. Wartścią stałej znakwej jest wartść kdu ASCII, np. kd ASCII znak kd ASCII znak kd ASCII znak 48 0 65 A 97 a 49 1 66 B 98 b 50 2 67 C 99 c.................. 57 9 90 Z 122 z Pewne znaki niegraficzne mgą być reprezentwane w stałych znakwych przez sekwencje specjalne, które wyglądają jak dwa znaki, ale reprezentują tylk jeden znak: \n nwy wiersz \\ \ (ang. backslash) \t tabulatr pzimy \ apstrf \v tabulatr pinwy \ cudzysłów \a alarm \? znak zapytania Zapis A znacza jeden znak, natmiast zapis A - dwa znaki, gdyŝ jest t napis kńczący się znakiem \0. Funkcje d wprwadzanie i wyprwadzanie znaków printf() scanf() gets() Nagłówek: int printf(cnst char *frmat,...); d wyświetlenia łańcucha znaków uŝywamy: %s, zaś pjedynczeg znaku - %c, Nagłówek: int scanf(cnst char *frmat,...); d wczytania łańcucha znaków uŝywamy: %s, zaś pjedynczeg znaku - %c, Nagłówek: char *gets(char *s); gets wprwadza wiersz (ciąg znaków zakńczny \n ) ze strumienia stdin (klawiatura) i umieszcza w bszarze pamięci wskazywanym przez s zastępując \n znakiem \0, zwraca wskaźnik na pczątek wypełnianeg bszaru, np, char bufr[80]; gets(bufr); Infrmatyka 1 - Pracwnia Strna 2 z 9 2009 Jarsław Frenc

puts() Nagłówek: int puts(cnst char *s); puts wypisuje na stdut (ekran) zawartść łańcucha znakweg (ciąg znaków zakńczny znakiem \0 ) zastępując znak \0 znakiem \n, char bufr[80] = t jest tekst ; puts(bufr); Funkcje z pliku nagłówkweg string.h strlen() Nagłówek: size_t strlen(cnst char *s); zwraca długść łańcucha znaków, nie bierze pd uwagę znaku \0, strcpy() Nagłówek: char *strcpy(char *s1, cnst char *s2); kpiuje łańcuch s2 d łańcucha s1, strcat() Nagłówek: char *strcat(char *s1, cnst char *s2); dłącza d łańcucha s1 łańcuch s2, strchr() Nagłówek: char *strchr(cnst char *s, int c); przeszukuje łańcuch s w celu znalezienia pierwszeg wystąpienia znaku c, zwraca wskaźnik d znalezineg znaku lub NULL, jeśli znak nie zstał znaleziny, strcmp() Nagłówek: int strcmp(cnst char *s1, cnst char *s2); prównuje łańcuchy s1 i s2 z rzróŝnianiem wielkści liter, zwraca 0 gdy s1=s2, wartść mniejszą d zera, gdy s1<s2 i wartść większą d zera, gdy s1>s2, strcmpi() Nagłówek: int strcmpi(cnst char *s1, cnst char *s2); strlwr() strrev() działa jak strcmp, ale bez rzróŝniania wielkści liter, Nagłówek: char *strlwr(char *s); zamienia w łańcuchu s duŝe litery na małe, Nagłówek: char *strrev(char *s); dwraca klejnść znaków w łańcuchu s, strset() Nagłówek: char *strset(char *s, int c); wypełnia łańcuch s znakiem c, strstr() strupr() Nagłówek: char *strstr(cnst char *s1, cnst char *s2); przeszukuje łańcuch s1 w celu dnalezienia pdłańcucha s2 zwracając wskazanie d elementu łańcucha s1, d któreg zaczynają się znaki takie same jak w łańcuchu s2, lub NULL, gdy s2 nie występuje w s1, Nagłówek: char *strupr(char *s); zamienia w łańcuchu s litery małe na duŝe, Przykład nr 7.1 Przykładwe peracje na łańcuchu znaków. #include <stdi.h> #include <string.h> #include <cni.h> int main() char napis1[] = "tekst w bufrze"; char napis2[20]; int dlugsc; } printf("napis1: %s \n",napis1); dlugsc = strlen(napis1); printf("liczba znakw w napis1: %d \n",dlugsc); strupr(napis1); printf("napis1 (duze litery): %s \n",napis1); strlwr(napis1); printf("napis1 (male litery): %s \n",napis1); strcpy(napis2,napis1); printf("napis2: %s \n",napis2); strrev(napis2); printf("napis2 (dwrcny): %s \n",napis2); getch(); return 0; W wyniku uruchmienia pwyŝszeg prgramu na ekranie pjawi się: napis1: tekst w bufrze liczba znakw w napis1: 15 napis1 (duze litery): TEKST W BUFORZE napis1 (male litery): tekst w bufrze napis2: tekst w bufrze napis2 (dwrcny): ezrfub w tsket Infrmatyka 1 - Pracwnia Strna 3 z 9 2009 Jarsław Frenc Infrmatyka 1 - Pracwnia Strna 4 z 9 2009 Jarsław Frenc

Struktury Struktura jest zestawem elementów róŝnych typów, zgrupwanych pd jedną nazwą. Struktury słuŝą zatem d reprezentacji złŝnych biektów róŝnych danych. Ogólna pstać deklaracji struktury jest następująca: struct nazwa pis_pla_1; pis_pla_2;... pis pla_n; Deklaracja struktury rzpczyna się d słwa kluczweg struct, p którym mŝe występwać pcjnalna nazwa struktury (etykieta struktury). Pmiędzy nawiasami klamrwymi umieszczne są pla struktury (kmpnenty struktury, składwe struktury), mające taką samą pstać jak deklaracje zmiennych w prgramie. W deklaracji struktury muszą występwać wszystkie nawiasy klamrwe i średniki. PniŜej przedstawine są przykłady deklaracji struktur. struct punkt int x; int y; struct sba char nazwisk[20]; int wzrst, waga; struct int a, b, c; flat d, e; Pla jedneg typu mŝna łączyć przecinkami. Nazwy pól struktury mgą być takie same jak nazwy innych zmiennych w prgramie, a nawet takie same jak nazwa struktury. Deklarując strukturę wprwadzamy nwy typ danych (np. struct punkt), którym mŝna psługiwać się tak sam jak kaŝdym innym typem standardwym. P klamrze kńczącej listę pól struktury mŝe występwać lista zmiennych, np. struct sba char nazwisk[20]; } Kwalski, Nwak; - Kwalski i Nwak są zmiennymi typu struct sba. W przypadku deklaracji, p której nie występuje lista zmiennych, nie następuje przydział pamięci. Jeśli pdana zstała nazwa struktury, t zmienne mŝna zadeklarwać później, np. struct sba char nazwisk[20]; struct sba Kwalski, Nwak; Odwłania d pól struktury Dstęp d pól struktury mŝliwy jest dzięki knstrukcji typu: nazwa_struktury.nazwa_pla W pniŝszym przykładzie zapisujemy wartść 25 d pla wiek zmiennej strukturalnej Kwalski Kwalski.wiek = 25; nazwa pla krpka nazwa zmiennej typu strukturalneg Operatr krpki nazywany jest peratrem bezpśrednieg wybru pla. W przypadku, gdy zmienna strukturalna jest wskaźnikiem, t d dwłania d pla struktury uŝywamy peratra pśrednieg wybru pla (->), np. struct sba Nwak, *Nwak1; Nwak1 = &Nwak Nwak1 -> wiek = 25; lub (*Nwak1).wiek = 25; W statnim zapisie nawiasy są knieczne, gdyŝ peratr. ma wyŝszy prirytet niŝ peratr *. Przykład nr 7.2 Przykładwe peracje na strukturach. #include <stdi.h> #include <cni.h> struct sba char nazwisk[20]; int main() struct sba Nwak; Infrmatyka 1 - Pracwnia Strna 5 z 9 2009 Jarsław Frenc Infrmatyka 1 - Pracwnia Strna 6 z 9 2009 Jarsław Frenc

printf("imie: "); scanf("%s",nwak.imie); printf("nazwisk: "); scanf("%s",nwak.nazwisk); printf("wiek: "); scanf("%d",&nwak.wiek); printf("%s %s, wiek: %d\n",nwak.imie,nwak.nazwisk,nwak.wiek); typedef struct sba* ptrsba; nwa nazwa typu, stara nazwa typu, słw kluczwe typedef. } getch(); return 0; Inicjalizacja zmiennej strukturalnej W deklaracjach pól struktury nie mgą występwać inicjalizacje. MŜna natmiast inicjalizwać zmienne strukturalne, np. struct sba Nwak = Jan, Nwak,25 Brakujące pla w inicjalizacji zstaną zastąpine zerami. KaŜda wartść pczątkwa musi być wyraŝeniem stałym (nie mŝe być zmienną). Zmienne strukturalne teg sameg typu mŝna sbie przypisywać, ale nie mŝna ich prównywać ze sbą. struct sba Nwak = Jan, Nwak,40 struct sba Nwak1; Nwak1 = Nwak; Plami struktury mgą być inne struktury, mŝna definiwać tablice struktur, np. struct data int dzien, miesiac, rk; struct sba char nazwisk[20]; struct data ur; struct sba Nwak, RdzinaKwalskich[5]; Nwak.ur.rk = 1980; RdzinaKwalskich[1].ur.rk = 1965; Pla bitwe Pla bitwe umŝliwiają przechwywanie małych wartści zajmujących pjedyncze bity bez zbędnych strat pamięci. Pla bitwe deklaruje się wewnątrz struktur w następujący spsób: typ id_pla : wielkść_pla bszar zajmwany przez ple, w bitach, pcjnalny identyfikatr (nazwa) pla, typ, mŝe t być: int, unsigned int, signed int. Pla zajmują tyle bitów, ile pdan jak wielkść_pla. Wartści zapisane w plach traktwane są jak liczby całkwite. Zakres wartści pól wynika z wielkści_pla. Dstęp d pól bitwych dbywa się na takiej samej zasadzie jak d nrmalnych pól struktury, np. struct bits unsigned int a : 4; unsigned int b : 2; unsigned int : 2; unsigned int c : 6; } x; x.a = 5; x.b = 3; x.b = 4; Unie - zapis niepprawny, gdyŝ ple b zajmuje 2 bajty, a d zapisania liczby 4 ptrzebne są trzy bity (4 10 = 100 2 ). Unia jest specjalnym rdzajem struktury, w której aktywne jest tylk jedn ple. Unię deklaruje się w pdbny spsób jak strukturę: Deklaracje typedef Deklaracja typdef słuŝy d twrzenia nwych nazw typów danych, np. typedef int integer; integer x, y, *ptr; - twrzy dla typu int synnim integer, którym mŝna psługiwać się dkładnie tak sam jak typem int. unin nazwa char c; int i; duble f; } x; x.c x.i x.d Infrmatyka 1 - Pracwnia Strna 7 z 9 2009 Jarsław Frenc Infrmatyka 1 - Pracwnia Strna 8 z 9 2009 Jarsław Frenc

Zmienna x z pwyŝszeg przykładu mŝe zawierać wartść typu char lub wartść typu int lub wartść typu duble, ale tylk jedną z nich w danym mmencie. Rzmiar unii wyznaczany jest przez rzmiar największeg jej pla. Dstęp d pól unii jest taki sam jak d pól struktury, np. x.c = a ; x.d = 12.15; Unię mŝna zainicjwać jedynie wartścią typie jej pierwszej składwej. Infrmatyka 1 - Pracwnia Strna 9 z 9 2009 Jarsław Frenc