Ł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[] )
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 {}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;
}