Temat: Operacje na łańcuchach – tablicach znaków 2. Funkcje

Transkrypt

Temat: Operacje na łańcuchach – tablicach znaków 2. Funkcje
Temat: Operacje na ła cuchach – tablicach znaków
1. Poj cie ła cucha
Ła cuch to ci g znaków zako czony znakiem o kodzie zero (‘\0’).
Ła cuch mo e by zapami tany w programie w stałej albo zmiennej
ła cuchowej.
Przykład 1
char tekst[100]; // 100-elementowa tablica znakow
scanf(„%s”,tekst); //znaki podane z klawiatury (do pierwszego białego znaku )
//s kopiowane do zmiennej tekst i dostawiany jest znak ‘\0’
gets(tekst); //znaki podane z klawiatury (do znaku ko ca linii ) s
kopiowane do zmiennej tekst i dostawiany jest znak ‘\0’
//
char *tekst1=”To jest napis”; // przydział pami ci dla ła cucha tekst1 odbywa
// si w trakcie przypisania. Na ko cu ła cucha dostawiany jest znak ‘\0’.
T’; // bł d !!! tablica tekst ma ju przydział pami ci
char tekst='
2. Funkcje operuj ce na ła cuchach
<string.h> - plik nagłówkowy zawieraj cy operacje na ła cuchach
char ∗ strcpy( char *kopia, char * rodło );
kopiowanie wszystkich znaków ła cucha rodło (do znaku ‘\0’) do ła cucha
kopia. Dodatkowo funkcja zwraca wska nik do pierwszego znaku ła cucha
kopia.
Przykład 2
char str1[10];
char *str2 = „abc”;
strcpy(str1, str2);
printf("%s\n", str1);
printf("%s\n",strcpy(str1,"ABCD"));
Uwaga !!!
Nale y zadba o to, aby ła cuch
ródło miał znak ‘\0’ na ko cu.
1
Nale y zadba o to, aby ła cuch kopia był odpowiednio długi, aby pomie ci
wszystkie znaki ła cucha ródło
int strcmp ( char ∗tekst_1, char ∗tekst_2 )
funkcja zwraca warto : < 0
=0
>0
gdy
gdy
gdy
tekst_1 < tekst_2
tekst_1 == tekst_2
tekst_1 > tekst_2
Przykład 3
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
int wynik;
wynik = strcmp(buf2, buf1);
if (wynik > 0)
printf("napis buf2 jest wiekszy niz buf1\n");
else
printf("napis buf2 jest mniejszy niz buf1\n");
wynik = strcmp(buf2, buf3);
if (wynik> 0)
printf("napis buf2 jest wiekszy niz buf3\n");
else
printf("napis buf2 jest mniejszy niz buf3\n");
unsigned strlen(char ∗s )
Funkcja wyznacza i zwraca długo
(ilo
znaków) ła cucha s (bez znaku ‘\0’)
Przykład 4
char *tekst="Jak dlugi jest to napis";
printf("Dlugosc napisu %s : %d\n",tekst,strlen(tekst));
char ∗strcat( char ∗kopia, char ∗ ródło )
Funkcja dodaje ła cuch ródło do ła cucha kopia. Zwraca wska nik na
poł czony ła cuch kopia.
2
Przykład 5
char cel[25];
char *spacja = " ", *c = "C++", *st = "Dev ";
strcpy(cel, st);
strcat(cel, spacja);
printf("%s\n", strcat(cel, c));
char ∗strchr(char ∗s, int c )
Funkcja szuka pierwszego wyst pienia znaku c w podanym ła cuchu s
Zwraca wska nik na znalezion pozycj wyst pienia lub adres NULL.
Przykład 6
char string[17];
char *ptr, c = '‘;
strcpy(string, "To jest poczatek");
ptr = strchr(string, c);
if (ptr) printf("Znak %c wystepuje na pozycji: %d\n", c, ptr-string);
else printf("Znaku nie znaleziono\n");
char ∗strrchr( char ∗s, int c )
Funkcja szuka ostatniego wyst pienia znaku c w podanym ła cuchu s
Zwraca wska nik na znalezion pozycj wyst pienia lub adres NULL.
Przykład 7
char string[15];
char *ptr, c = '
r'
;
strcpy(string, "To jest napis");
ptr = strrchr(string, c);
if (ptr) printf("Znak %c wystepuje na pozycji: %d\n", c, ptr-string);
else printf("Znak nie wystepuje\n");
char ∗strstr( char ∗s, char ∗sub )
Funkcja szuka pierwszego wyst pienia ła cucha sub w podanym ła cuchu s
Zwraca wska nik na znalezion pozycj wyst pienia lub adres NULL.
3
Przykład 8
char *str1 = "Dev C++", *str2 = "C++", *ptr;
ptr = strstr(str1, str2);
printf("Podstring: %s wystepuje na pozycji %d\n", ptr,ptr-str1);
char∗ strupr( char ∗s )
Funkcja zamienia zawarto
ła cucha s na du e litery
Przykład 9
char *string = "abcde89fgh***ijKLMnopqrstuvwxyz", *ptr;
//ptr = strupr(string);
printf("%s\n", strupr(string));
char∗ strlwr( char ∗s )
Funkcja zamienia zawarto
ła cucha s na małe litery
Przykład 10
char *string = "Dev C++";
strlwr(string);
printf("%s\n", string);
4
3. Przykład programu przetwarzaj cego ła cuchy
Przykład 11
#include <conio.h>
#include <stdio.h>
#include <string.h>
char miesiace[12][14];
// miesiace - tablica dwunastu stałych napisów
struct Pracownik{
char nazwisko[40];
float zarobki[12];
};
// funkcja do wczytywania danych typu Pracownik
void wczytaj_dane(Pracownik *P,int *ile)
{
printf("Nazwisko:");
scanf("%s",P[*ile].nazwisko);
//strupr(P[*ile].nazwisko);
for (int i=0;i<12;i++)
{
printf("%s:",miesiace[i]);
scanf("%f",&P[*ile].zarobki[i]);
}
(*ile)++;
}
// funkcja wypisuj ca nazwiska osób zaczynaj cych si napisem pocz
void wypisz_osoby(Pracownik *P,int ile,char *pocz)
{
char *pomoc,bufor[40],bufor1[40];
strcpy(bufor1,pocz);
for (int i=0;i<ile;i++)
{
strcpy(bufor,P[i].nazwisko);
pomoc=strstr(strupr(bufor),strupr(bufor1));
if (pomoc!=NULL && pomoc==bufor1)
printf("%s\n",P[i].nazwisko);
}
}
5
int main( )
{
#define n 100
Pracownik P[n];
int ile=0;
for (int i=1;i<=3;i++)
wczytaj_dane(P,&ile);
char pocz[4];
printf("Podaj trzy pierwsze litery nazwiska :");
scanf("%s",pocz);
wypisz_osoby(P,ile,pocz);
getch();
return 0;
}
6

Podobne dokumenty