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

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

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

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

Tablice deklaracja, reprezentacja wewnętrzna

dr inż. Jarosław Forenc

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

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

Wprowadzenie do programowania w języku C

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

Podstawy Programowania

Operacje na łańcuchach znaków

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

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

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

Podstawy programowania 1

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

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

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

Programowanie Proceduralne

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

Tablice, funkcje - wprowadzenie

Reprezentacja symboli w komputerze.

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

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

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

PARADYGMATY PROGRAMOWANIA Wykład 3

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

Inicjacja tablicy jednowymiarowej

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

Podstawy programowania w języku C++

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

1 Przetwarzanie tablic znakowych

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

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

Języki i metody programowania I

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

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

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

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

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

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:

Wskaźniki. Informatyka

Funkcje zawarte w bibliotece < io.h >

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

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

Wstęp do programowania

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Funkcje zawarte w bibliotece < io.h >

Języki i metodyka programowania. Wskaźniki i tablice.

Wykład Wskaźniki a tablice jednowymiarowe Arytmetyka wskaźników Dostęp do elementów tablic

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

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

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

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

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

PODSTAW PROGRAMOWANIA WYKŁAD 6 WSKAŹNIKI

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

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.

JĘZYK C - TABLICE DWUWYMIAROWE,

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

lekcja 8a Gry komputerowe MasterMind

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

Programowanie Proceduralne

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

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.

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

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

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

Wstęp do programowania

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

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

main() { float promien=p,wysokosc=h,objetosc; float objetosc_walca(float promien, float wysokosc);

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

Podstawy Programowania

Programowanie w językach wysokiego poziomu

Wskaźniki w C. Anna Gogolińska

Podstawy programowania w języku C++

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wstęp do programowania

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Tablice, funkcje, wskaźniki - wprowadzenie

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

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

Podział programu na moduły

Podstawy Programowania. Przetwarzanie napisów, drzewa binarne

Informatyka 1. Przetwarzanie tekstów

1. Typy zmiennych. 2. Typy podstawowe: char short int int long int float

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

Podstawy programowania w języku C++

Reprezentacja symboli w komputerze.

2 Przygotował: mgr inż. Maciej Lasota

Transkrypt:

ŁAŃCUCHY W JĘZYKU C/C++ Stała tekstowa / łańcuchowa jest tablicą znaków zakończoną znakiem o kodzie: 0 np. stała łańcuchowa: Jestem tekstem... 74 101 115 116 101 109 32 116 101 107 115 116 101 109 0...... J e s t e m t e k s t e m \0... 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 char tekst; tekst = Jestem tekstem ; char tekst2[ 100]; // wskaźnik na znak == wskaźnik na początek łańcucha znaków // przypisanie zmiennej tekst adresu // początku łańcucha znaków // 100-elementowa tablica znakow tekst2 = Jestem tekstem ; // błędne przypisanie!!! memcpy( tekst2, Jestem tekstem, 15 ); // poprawne przypisanie Funkcje operujące na łańcuchach <string.h> // kopiowanie jednego łańcucha do drugiego wersja tablicowa char strcpy( char tekst_wyj[ ], char tekst_wej[ ] ) int i = 0; while( ( tekst_wyj[ i ] = tekst_wej[ i ] )!= \0 ) i++; return( tekst_wyj ); // kopiowanie jednego łańcucha do drugiego wersja wskaźnikowa 1 char strcpy( char tekst_wyj, char tekst_wej ) char pocz=tekst_wyj; while( ( tekst_wyj = tekst_wej )!= \0 ) tekst_wyj++; tekst_wej++; return( pocz ); M. Piasecki, INFORMATYKA 1 str. 1 (W7) Łańcuchy znaków

// funkcja kopiująca łańcuchy wersja wskaźnikowa 2 char strcpy( char tekst_wyj, char *tekst_wej ) char pocz=tekst_wyj; while( tekst_wyj++ = tekst_wej++ ) ; return( pocz ); Funkcja porównująca teksty: int strcmp ( char tekst_1, char tekst_2 ) ( ang. string compare ) funkcja zwraca wartość: < 0 gdy tekst_1 < tekst_2 = 0 gdy tekst_1 == tekst_2 > 0 gdy tekst_1 > tekst_2 int strcmp( char tekst_1[ ], char tekst_2[ ] ) int i = 0; while( tekst_1[ i ] == tekst_2[ i ] ) if( tekst_1[ i++ ] == \0 ) return( tekst_1[ i ] tekst_2[ i ] ); // wersja tablicowa int strcmp( char tekst_1, char tekst_2 ) // wersja wskaźnikowa 1 while( tekst_1 == tekst_2 ) if( tekst_1 == \0 ) tekst_1 = tekst_1 + 1; tekst_2 = tekst_2 + 1 ; return( tekst_1 tekst_2 ); int strcmp( char tekst_1, char tekst_2 ) // wersja wskaźnikowa 2 for( ; tekst_1 == tekst_2 ; tekst_2++ ) if(! tekst_1++ ) return( tekst_1 tekst_2 ); M. Piasecki, INFORMATYKA 1 str. 2 (W7) Łańcuchy znaków

Inne wybrane funkcje biblioteki string <string.h> size_t strlen( const char s ) od ang. string length Funkcja wyznacza i zwraca długość (ilość znaków) łańcucha s (bez znaku \0 ) char strcat( char dest, const char src ) od ang. string concatenate Funkcja dodaje łańcuch src (ang. source) do łańcucha dest (ang. destination) Zwraca wskaźnik na połączony łańcuch (dest) char strchr( const char s, int c ) od ang. string char Funkcja szuka pierwszego wystąpienia znaku c w podanym łańcuchu s char strrchr( char s, int c ) od ang. string right char Funkcja szuka ostatniego wystąpienia znaku c w podanym łańcuchu s char strstr( char s, const char sub ) od ang. scans string for substring Funkcja szuka pierwszego wystąpienia łańcucha sub w podanym łańcuchu s char strupr( char s ) od ang. string upper Funkcja zamienia zawartość łąńcucha s na duże litery char strlwr( char s ) od ang. string lower Funkcja zamienia zawartość łąńcucha s na małe litery M. Piasecki, INFORMATYKA 1 str. 3 (W7) Łańcuchy znaków

Przykłady operacji na łańcuchach znaków 1) #include <stdio.h> // przykład zamiany wszystkich liter na duże #include <ctype.h> // standardowe funkcje zamiany łańcuchów na małe lub duże litery // #include <string.h> char *strlwr(char *s); char *strupr(char *s); char Zamien_Na_Duze( char tekst ) char wsk = tekst; do wsk = toupper( wsk ); // zamiana pojedynczej litery na dużą while( wsk++ ); return( tekst ); //------------------------------------------------------------------------ Zamien_Na_Duze char lancuch_testowy = "abcdefghijklmnopqrstuvwxyz"; printf( "%s\n", Zamien_Na_Duze ( lancuch_testowy ) ); 2) #include <stdio.h> // przykład zamiany pierwszych liter wyrazów #include <ctype.h> char Slowa_Na_Duze( char tekst ) char wsk = tekst; if(! wsk ) // jeżeli tekst pusty to zakończ działanie return(tekst); wsk = toupper( wsk ); // zamiana pierwszej litery while( ++wsk ) if( (wsk-1) == ' ' ) // jeżeli poprzedzający znak jest spacją wsk = toupper( wsk ); // zamiana znaku na dużą literę return( tekst ); //------------------------------------------------------------------------ Slowa_Na_Duze char lancuch = "to jest probka tekstu "; printf( "%s\n", Slowa_Na_Duze( lancuch ) ); M. Piasecki, INFORMATYKA 1 str. 4 (W7) Łańcuchy znaków

3) #include <stdio.h> // funkcja zamieniająca zadane fragmenty tekstu #include <string.h> void Zamien_Fragmenty( char tekst, char stary_wzorzec, char nowy_wzorzec ) char wsk = tekst; int dlugosc_starego = strlen( stary_wzorzec ); int dlugosc_nowego = strlen( nowy_wzorzec ); do wsk = strstr( tekst, stary_wzorzec ); if( wsk ) // if( wsk!= null ) // ewentualne zsunięcie lub rozsunięcie tekstu memmove( wsk + dlugosc_nowego, wsk + dlugosc_starego, strlen( wsk + dlugosc_starego ) +1 ); // wpisanie nowego wzorca w przygotowane miejsce memcpy( wsk, nowy_wzorzec, dlugosc_nowego); while( wsk ); //---------------------------------------------------------------------- Zamien_Fragmenty char tekst[200] = "Ala ma kota a Ola ma Asa"; printf( "Stary tekst: %s\n", tekst ); Zamien_Fragmenty( tekst, "ma", "miala" ); printf( " Nowy tekst: %s\n", tekst ); // "Ala miala kota a Ola miala Asa" UWAGA! Zastosowanie w powyższym przykładzie funkcji strcpy zamiast memmove będzie generować błędy (gdy nowy_wzorzec będzie dłuższy od stary_wzorzec) np. strcpy( wsk+dlugosc_nowego, wsk+dlugosc_starego ); utworzy tekst: Ala ma ko ko ko ko ko ko ko k Definicja: char tekst = "Ala ma kota a Ola ma Asa"; jest równoważna: char tekst[24+1] = "Ala ma kota a Ola ma Asa"; Ponieważ podczas zamiany tekst może się wydłużyć (poprzez wstawienie dłuższych fragmentów), więc zmienna tekst powinna być tablicą większą niż długość inicjującego tekstu. M. Piasecki, INFORMATYKA 1 str. 5 (W7) Łańcuchy znaków