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
N
różny od ‘\n’?
T
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.
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.