Łańcuchy znaków Agnieszka Nowak - Brzezińska
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!
Etap I Napisz program w całości na tablicach znaków.
int str_len( char s[] ) int lwr_str_cnt( char s[] ) int upr_str_cnt( char s[] ) int dgt_str_cnt( char s[] ) int nalpha_str_cnt( char s[] ) int chr_str_cnt( char c, char s[] ) int chr_str_pos( char c, char s[] ) int chr_str_rpos( char c, char s[] ) void str_rev( char s[] ) długość łańcucha ile małych znaków ile dużych znaków ile cyfr ile znaków i cyfr liczba wystąpień wskazanego znaku Pozycja znaku w tablicy liczona od 0 lub -1 gdy znak nie znaleziony Wyznacza indeks (pozycje w napisie) ostatniego wystapienia znaku c w s Wyznacza indeks (pozycje w napisie) ostatniego wystapienia znaku c w s
długość napisu liczona w znakach int str_len( char s[] ) int len = 0; while( s[ len ]!= '\0' ) len++; return len;
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;
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;
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;
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;
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;
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;
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;
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;
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;
Etap II Napisz program w całości stosując wskaźniki przy łańcuchach znaków.
Ile znaków ma łańcuch? int str_len(char * s) int i=0; while (*s!= '\0') s++; i++; return i;
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;
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;
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;
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;