Spis treści

Znaki w C

Poniższy przykład wyświetla wartość odpowiadającą znakowi 'A' oraz znak odpowiadający liczbie 'A'+1 .

znak.c
#include<stdio.h>
 
int main()
{
   char znak = 'A';
 
   printf("%c %d\n", znak, znak);
   printf("%c %d\n", znak+1, znak+1);
   printf("%c %d\n", 42, 42);
}

Program wyświetli następujący komunikat:

A 65
B 66
* 42

Ćwiczenie: kod ASCII

Wypisz wszystkie znaki kodu ASCII wraz z odpowiadającymi im wartościami liczbowymi (od 0 do 127). Liczby wypisz w formacie dziesiętnym, szesnastkowym i ósemkowym, tak aby uzyskać tabelę podobną do poniższego fragmentu:

Znak Dec   Hex   Oct  
──────────────────────
...

X    88    58    130  
Y    89    59    131  
Z    90    5A    132  
[    91    5B    133  
\    92    5C    134  
]    93    5D    135   
^    94    5E    136   
_    95    5F    137   
`    96    60    140   
a    97    61    141   
b    98    62    142   
c    99    63    143  
...

Funkcja getchar() i putchar()

Przykład:

cat.c
#include <stdio.h>
 
int main()
{
	char a;
 
	while((a=getchar()) != EOF) 
		putchar(a);
 
	return 0;
}

Powyższy program kopiuje na wyjście wszystkie znaki wprowadzone na wejściu. Program działa aż do momentu napotkania końca strumienia (pliku). Stosując przekierowanie strumienia wejściowego, można powyższy program wykorzystać do wyświetlenia zawartości dowolnego pliku, np. wydając w terminalu polecenie:

$ program < plik_wejsciowy

Przekierowując wyjście z programu do pliku możemy skopiować dowolny plik

$ program < plik_wejsciowy > plik_docelowy

Ćwiczenie: małe na duże

Napisz funkcję o nazwie male_na_duze, która zamienia małą literę na wielką literę.
Argumenty funkcji:

Wartość zwracana funkcji:

Wykorzystaj funkcję male_na_duze do napisania programu, który zamienia tekst wprowadzony na standardowym wejściu w taki sposób, że wszystkie małe litery będą zamienione na wielkie litery. Tekst wejściowy czytany jest aż do napotkania znaku EOF.

Przykład: dla tekstu podanego na wejściu

Ala ma kota, a KOT ma Ale
i zyc bez siebie nie moga wcale.
123 (!@#)

program generuje następujące wyjście

ALA MA KOTA, A KOT MA ALE
I ZYC BEZ SIEBIE NIE MOGA WCALE.
123 (!@#)

Biblioteka ctype.h

Plik nagłówkowy ctype.h zawiera deklaracje funkcji służących do klasyfikacji znaków. Zobacz: ctype.h

Oto lista wybranych funkcji z ctype.h

isalpha() czy znak przekazany jako argument literą alfabetu
isdigit() czy znak przekazany jako argument jest cyfrą
isalnum()' czy znak przekazany jako argument jest cyfrą lub literą alfabetu
isprint() czy znak przekazany jako argument jest znakiem drukowalnym
isspace() czy znak przekazany jako argument jest białym znakiem
islower() czy znak przekazany jako argument jest małą literą alfabetu
isupper() czy znak przekazany jako argument jest dużą literą alfabetu
tolower() zwraca znak zamieniony z dużej litery na małą
toupper() zwraca znak zamieniony z małej litery na dużą

Przykład

Poniższy przykład zawiera program realizujący zamianę znaków z małych na duże z użyciem funkcji zadeklarowanych w ctype.h.

toupper.c
#include <stdio.h>
#include <ctype.h>
 
int main()
{
   int a;
 
   while( (a = getchar()) != EOF )
   {
       if ( islower(a) ) a = toupper(a);
       putchar(a);
   }
 
   return 0;
}

Ćwiczenie: Licz znaki

Napisz program, który po wczytaniu tekstu ze standardowego wejścia wyświetla następujące informacje:

Przy liczeniu wyrazów zakładamy, że wyrazem jest ciąg znaków oddzielony przynajmniej jednym białym znakiem, tj. spacją, znakiem nowej linii '\n' lub znakiem tabulacji '\t' . Zauważ, że wyrazy nie muszą składać się tylko z liter alfabetu. Zwróć uwagę na to, że w tekście mogą wystąpić wyrazy oddzielone kilkoma następującymi po sobie białymi znakami oraz, że białe znaki mogą występować na początku linii (np. wcięcie kodu).

Przykładowo dla wprowadzonego teksu:

Ala ma kota, a KOT ma Ale
i zyc bez siebie nie mogą wcale.
123 (!@#)

program wypisze

znaki       69
wyrazy      16
linie       3
duze litery 5
male litery 38
cyfry       3

Zadanie: Licz litery alfabetu

Napisz program, który wyznacza liczbę wystąpień liter alfabetu w podanym tekście. Tekst czytany jest ze standardowego wejścia aż do końca pliku (EOF). Po wczytaniu tekstu program wyświetla listę liter alfabetu angielskiego w kolejności alfabetycznej od a do z, które pojawiły się w tekście, wraz z ilością wystąpień każdej z liter. Program nie rozróżnia wielkości liter, tj. zarówno mała litera 'a' oraz wielka litera 'A' traktowane są jako wystąpienie tej samej litery alfabetu. Dodatkowo, obok liczby wystąpień litery, program podaje częstość (w procentach) z jaką znak pojawił się w tekście. Częstość podawana jest z dokładnością do 2 miejsc po przecinku.

Przykładowo dla wprowadzonego teksu:

Ala ma kota, a KOT ma Ale
i zyc bez siebie nie moga wcale.
123 (!@#)

program wypisze

a  9  20.93
b  2   4.65
c  2   4.65
e  6  13.95
g  1   2.33
i  4   9.30
k  2   4.65
l  3   6.98
m  3   6.98
n  1   2.33
o  3   6.98
s  1   2.33
t  2   4.65
w  1   2.33
y  1   2.33
z  2   4.65

Rozwiązanie (plik źródłowy) umieść w Moodle pod adresem https://moodle.umk.pl/WFAIIS/mod/assign/view.php?id=2088