• Nie Znaleziono Wyników

Łańcuchy znaków

N/A
N/A
Protected

Academic year: 2021

Share "Łańcuchy znaków"

Copied!
22
0
0

Pełen tekst

(1)

Łańcuchy znaków

Agnieszka Nowak - Brzezińska

(2)

Warto najpierw zajrzeć…

http://gpl.ii.us.edu.pl/~romex/pp_cxx/pp_cxx_w_07.pdf

• Wszystkie funkcje są omówione w wykładzie !

(3)

Etap I

• Napisz program w całości na tablicach znaków.

(4)
(5)

int str_len( char s[] )

długość łańcucha {}

int lwr_str_cnt( char s[] )

ile małych znaków {}

int upr_str_cnt( char s[] )

ile dużych znaków {}

int dgt_str_cnt( char s[] )

ile cyfr

{}

int nalpha_str_cnt( char s[] )

ile znaków i cyfr {}

int chr_str_cnt( char c, char s[] )

liczba wystąpień wskazanego znaku {}

int chr_str_pos( char c, char s[] )

Pozycja znaku w tablicy liczona od 0 lub -1 gdy znak nie znaleziony {}

int chr_str_rpos( char c, char s[] )

Wyznacza indeks (pozycje w napisie) ostatniego wystapienia znaku c w s {}

void str_rev( char s[] )

Wyznacza indeks (pozycje w napisie) ostatniego wystapienia znaku c w s {}

(6)

długość napisu liczona w znakach

int str_len( char s[] ) {

int len = 0;

while( s[ len ] != '\0' ) len++;

return len;

}

(7)

Liczba małych liter w napisie s

int lwr_str_cnt( char s[] ) {

/* Wersja z iteracja while */

int i = 0, counter = 0;

while( s[ i ] != '\0' ) {

if( s[ i ] >= 'a' && s[ i ] <= 'z' ) counter++;

i++;

}

return counter;

}

(8)

Liczba dużych liter w napisie s

int upr_str_cnt( char s[] ) {

/* Wersja z iteracja for */

int i, counter;

for( i = 0 , counter = 0; s[ i ] != '\0'; i++ ) if( s[ i ] >= 'A' && s[ i ] <= 'Z' )

counter++;

return counter;

}

(9)

Liczba cyfr w napisie s

int dgt_str_cnt( char s[] ) {

/* Wersja z iteracja for */

int i, counter;

for( i = 0 , counter = 0; s[ i ] != '\0'; i++ ) if( s[ i ] >= '0' && s[ i ] <= '9' )

counter++;

return counter;

}

(10)

Liczba liter i cyfr w napisie s

int nalpha_str_cnt( char s[] ) {

/* Wersja z iteracja for */

int i, counter;

for( i = 0 , counter = 0; s[ i ] != '\0'; i++ ) if( ! ( s[ i ] >= '0' && s[ i ] <= '9'

|| s[ i ] >= 'a' && s[ i ] <= 'z' || s[ i ] >= 'A' && s[ i ] <= 'Z' ) ) counter++;

return counter;

}

(11)

Liczba wystąpień znaku c w napisie s

int chr_str_cnt( char c, char s[] ) {

int i, counter;

for( i = 0, counter = 0; s[ i ] != '\0'; i++ ) if( s[ i ] == c )

counter++;

return counter;

}

(12)

Pozycja znaku w tablicy liczona od 0 lub -1 gdy znak nie znaleziony

int chr_str_pos( char c, char s[] ) {

int i;

for( i = 0; s[ i ] != '\0'; i++ ) if( s[ i ] == c )

return i;

return -1;

}

(13)

Pozycja znaku w tablicy liczona od 0 lub -1 gdy znak nie znaleziony

int chr_str_rpos( char c, char s[] ) {

int i;

for( i = str_len( s ) - 1; i >= 0; i-- ) if( s[ i ] == c )

return i;

return -1;

}

(14)

Odwraca kolejność znaków w tablicy s

void str_rev( char s[] ) {

int i, len, c;

for( i = 0, len = str_len( s ); i <= len / 2; i++ ) {

c = s[ i ];

s[ i ] = s[ len - i - 1 ];

s[ len - i - 1 ] = c;

}

}

(15)

int main() {

char line[ MAX_LEN ];

char c;

int pos;

printf( "\n\nWpisz linie tekstu: " );

gets( line );

printf( "\nLiczba znakow : %d", str_len( line ) );

printf( "\nLiczba malych liter : %d", lwr_str_cnt( line ) );

printf( "\nLiczba duzych liter : %d", upr_str_cnt( line ) );

printf( "\nLiczba cyfr : %d", dgt_str_cnt( line ) );

printf( "\nLiczba innych znakow : %d", nalpha_str_cnt( line ) );

printf( "\n\nPodaj pojedynczy znak: " );

c = getchar(); fflush( stdin );

printf( "\nLiczba wystapien znaku %c : %d", c, chr_str_cnt( c, line ) );

if( ( pos = chr_str_pos( c, line ) ) != -1 ) printf( "\nPierwsze wystapienie znaku %c od poczatku : %d", c, pos + 1 );

else

printf( "\nZnak %c nie zostal znaleziony", c );

if( ( pos = chr_str_rpos( c, line ) ) != -1 ) printf( "\nPierwsze wystapienie znaku %c od konca : %d", c, pos + 1 );

else

printf( "\nZnak %c nie zostal znaleziony", c );

printf( "\n\nNapis oryginalny : %s", line );

str_rev( line );

printf( "\nNapis odwrocony : %s", line );

( void )getchar();

return 0;

}

(16)

Etap II

• Napisz program w całości stosując wskaźniki

przy łańcuchach znaków.

(17)
(18)

Ile znaków ma łańcuch ?

int str_len(char * s) {

int i=0;

while (*s != '\0') {

s++;

i++;

}

return i;

}

(19)

Ile jest wielkich liter ?

int str_upr_cnt(char * s) {

int i=0;

while (*s != '\0') {

if ((*s >= 'A')&&(*s <= 'Z')) i++;

s ++;

} return i;

}

(20)

Ile jest małych liter ?

int str_low_cnt(char *s) {

int i=0;

while (*s != '\0') {

if ((*s >= 'a')&&(*s <= 'z')) i++;

s ++;

}

return i;

}

(21)

Odwróć łańcuch !

char * str_rev(char * s) {

char * pom,*s1=s,c;

for (pom=s+str_len(s)-1 ; pom > s ; s++,pom --) {

c = *s;

*s = *pom;

*pom=c;

}

return s1;

}

(22)

int main() {

char * lan;

//char lan[20];

puts("podaj lancuch...");

gets(lan);

printf("\ndlugosc podanego lancucha wynosi: %d",str_len(lan));

printf("\nliczba duzyh znakow: %d",str_upr_cnt(lan));

printf("\nliczba malych znakow: %d",str_low_cnt(lan));

printf("\nodwrocony lancuch: %s",str_rev(lan));

getch();

return 0;

}

Cytaty

Powiązane dokumenty

Napisz program obsługujący zakład naprawy sprzętu gospodarstwa

2.Napisz program wyświetlający na ekranie za pomocą funkcji printf kody ASCCI podobnie jak program lab1_2.exe.. Zastosuj pętle for oraz

b) Jeśli podano liczbę 1234, to program wypisuje na ekranie „Brawo, to właściwy kod” i w kolejnym wierszu „masz teraz dostęp do tajnych informacji”3. Jeśli nie podano

wyświetlać listę prostokątów wraz sumą powierzchni (metoda wyświetl):.. Email: 4j Kowalski Jan

Próba odczytu zmiennej wskazywanej przez taki wskaźnik dostarczy &#34;tylko&#34; bezsensownego wyniku, natomiast próba zapisu (w przypadkowe miejsce pamięci!!) może skończyć

Na tej podstawie oszacuj czas działania pojedynczej pary tych instrukcji (po prostu zmierz czas wykonywania się powyższej pętli) i porównaj z czasem potrzebnym Twojemu procesorowi

odwiedzin danej strony (na przykład deltami.edu.pl) stabilizowała się na pewnej granicznej wartości, to byłoby rozsądnie uznać tę wartość za miarę ważności tej strony – im

momenty w życiu? Czy w obecnej sytuacji, kiedy pozostajemy w domu możemy stracić radość życia? Czy i w jaki sposób możemy temu zapobiec? Jak możemy pomóc naszym bliskim?