Katedra Informatyki Stosowanej
Borland C++
Opracowanie mgr Gra
ż
yna G
ę
bal, WZiMK P
Ś
k
Ćwicz. 4 – Operacje na zmiennych i tablicach znakowych
Operacje wejścia/wyjścia dla zmiennych znakowych (<stdio.h>)
int getchar(void)
Funkcja pobiera ze standardowego strumienia wejściowego (klawiatura) następny znak i zwraca jego wartość
(kod znaku). W przypadku błędu lub napotkania końca pliku zwraca EOF.
int putchar(int)
Funkcja wypisuje jeden znak do standardowego strumienia wyjściowego (monitor). Zwraca wypisany znak
lub EOF w przypadku błędu.
Zad. 4.1
Uzupełnić poniższy program, tak aby dla zadanego ciągu znaków zakończonego klawiszem Enter wyznaczona
została liczba występujących w nim cyfr, liter oraz pozostałych znaków. Do rozwiązania zadania wykorzystać
poniższy schemat blokowy. Następnie zmodyfikować program przenosząc instrukcję czytania kolejnego znaku
do warunku pętli.
Uwaga: Wciśnięcie klawisza Enter powoduje przesłanie do standardowego strumienia wejściowego znaku nowej
linii (‘\n’).
#include <stdio.h>
char litera(char);
char cyfra(char);
void main()
{
char c; int lc,
//liczba cyfr
ll,
//liczba liter
lp;
//liczba pozostałych znaków
lc=ll=lp=0;
printf("\nPodaj ciag znakow, zakoncz Enterem\n");
Tu należy wstawić ciąg instrukcji obliczających ile w podanym ciąg znaków występuje cyfr, liter oraz pozostałych
znaków (porównać schemat blokowy). Wykorzystać funkcje
litera
oraz
cyfra.
printf("\nLiczba cyfr: %d", lc);
printf("\nLiczba liter: %d", ll);
printf("\nLiczba pozostalych znakow: %d", lp);
return;
}
char litera(char znak)
{
Tu należy wstawić teść funkcji badającej czy podany znak jest literą. Jeśli tak funkcja powinna zwrócić wartość 1, w
przeciwnym przypadku wartość 0.
}
char cyfra(char znak)
{
if ( znak>='0' && znak<='9' ) return 1;
return 0;
}
Wczytaj znak.
Czy jest to znak
różny od ‘\n’?
Zbadaj znak. Jeśli jest to cyfra zwiększ licznik
cyfr, jeśli litera – licznik liter, a jeśli inny znak to
licznik pozostałych znaków.
Wczytaj kolejny znak.
T
N
Katedra Informatyki Stosowanej
Borland C++
Opracowanie mgr Gra
ż
yna G
ę
bal, WZiMK P
Ś
k
Zad. 4.2
W programie z zad. 4.1 przenieść operację czytania znaku do warunku pętli.
Operacje wejścia/wyjścia dla tablic znakowych (<stdio.h>)
char *gets(char *s)
Funkcja wczytuje ze standardowego strumienia wejściowego następny wiersz i wpisuje go do tablicy s.
Końcowy znak nowego wiersza zastępuje znakiem ‘\0’. Zwraca s (adres tablicy). W przypadku błędu lub
napotkania końca pliku zwraca NULL.
int puts(const char *s)
Funkcja wypisuje tekst zawarty w tablicy s oraz znak nowego wiersza do standardowego strumienia
wyjściowego. Zwraca liczbę nieujemną lub EOF w przypadku błędu.
Zad. 4.3
Poniższy program wczytuje łańcuch znaków do tablicy buf1. Następnie usuwa z niego wszystkie spacje i wynik
zapisuje do buf2. Zawartość buf2 wyprowadza na ekran. Zmodyfikować ten program, tak aby w pętli wczytywał
kolejne podawane linie znaków i usuwał z nich spacje. Pętla powinna zakończyć się po przesłaniu do programu
znaku końca pliku (Ctrl-z). Sprawdzić czy program działa poprawnie, jeśli w zadanym łańcuchu występują znaki
tabulacji. Jeśli działanie programu jest błędne należy poprawić funkcję bez_spacji.
#include <stdio.h>
void bez_spacji(char [],char []);
void main()
{ char buf1[81],buf2[81];
gets(buf1);
bez_spacji(buf1,buf2);
puts(buf2);
return;
}
void bez_spacji(char buf1[],char buf2[])
{
int i,j;
for (i=j=0 ; buf1[i]!=’\0’ ; i++)
if (buf1[i]!=' ') {buf2[j]=buf1[i]; j++;}
buf2[j]='\0';
return;
}
Zad. 4.4
Do programu z zad. 4.3 dodać funkcję duze_litery, która w zadanej tablicy znakowej zamienia wszystkie małe
litery na duże. Następnie w programie głównym zastosować tę funkcję do łańcucha bez spacji.
Uwaga: Wykorzystać funkcję toupper(c), która zwraca c przekształcone na dużą literę. Funkcja znajduje się w
nagłówku ctype.h.
Zadania domowe
1. W programie zmienić funkcję bez_spacji, następnie dostosować program do nowej wersji funkcji.
void bez_spacji(char buf[])
{
int i,j;
for (i=j=0 ; buf[i] ; i++)
if (buf[i]!=' ') buf[j++]=buf[i];
buf[j]='\0';
return;
}
2. Napisać program, który bada dwa ciągi znakowe następująco:
•
czy ciągi różnią się pierwszym znakiem,
•
czy ciągi różnią się ostatnim znakiem,
•
który z ciągów jest dłuższy.
Uwaga: zaprojektować program, tak aby były wykorzystywane funkcje programisty.