ZAJ CIA 8. Ła cuchy znakowe

Transkrypt

ZAJ CIA 8. Ła cuchy znakowe
Metodyki i techniki programowania 1
2008/2009
ZAJ CIA 8. Ła cuchy znakowe
1. ZNAK, WYRA ENIE STAŁE, NAPIS
Stała znakowa – jest to liczba całkowita. Tak stał tworzy jeden znak ujty
w apostrofy np.: ‘A’. Wartoci stałej znakowej jest warto kodu ASCII. Mamy znaki
graficzne i niegraficzne, którym przypisane s wartoci od 0 do 255.
Sposób deklaracji:
char znak;
znak = ’A’;
Przykładowe znaki i odpowiadajce im kody ASCII:
Kod
48
49
50
Znak
0
1
2
Kod
65
66
67
Znak
A
B
C
Kod
97
98
99
Znak
a
b
c
Znaki niegraficzne mog by reprezentowane w stałych znakowych jako sekwencje
specjalne, które wygldaj jak dwa znaki ale reprezentuj jeden znak:
‘\n’ – znak nowego wiersza
‘\t’ - znak tabulacji
‘\a’ - znak alarmu
W funkcjach printf i scanf do wywietlania/wczytania stałej znakowej słuy format
%c.
Wyraenia stałe – jest to wyraenie, w którym wystpuj wyłcznie stałe. Wyraenia
stałe s obliczanie na etapie kompilacji programu, a nie podczas jego działania.
Przykłady deklaracji stałych:
#define KURS_EURO 4.05
#define ZNAK ’a’
#define NAPIS “ania1980”
Napis – ( łacuch znaków) jest to cig złoony z zera lub wicej znaków zawartych
midzy znakami cudzysłowu.
”ania1980” – znaki cudzysłowu nie s czci napisu, słu jedynie do okrelenia
jego granic.
Napis jest tablic, której elementami s znaki.
- ostatnim elementem w tablicy jest znak ‘\0’ (znak o kodzie 0), oznaczajcy koniec
napisu,
mgr in . Adam Id kowski
1
Metodyki i techniki programowania 1
2008/2009
- rozmiar fizycznej pamici przeznaczonej na napis jest o jeden wikszy ni liczba
znaków zawartych mi dzy znakami cudzysłowu,
- wikszo funkcji standardowych w j zyku C i kompilator dodaj automatycznie na
kocu znak ‘\0’.
” ania1980”
a
n
i
a
1
9
8
0
\0
Uwaga: ‘A’ to jeden znak, ale ”A” to ju dwa znaki.
2. DEKLARACJA NAPISU (ŁA CUCHA ZNAKÓW)
Jeli napis ma w programie by zmienn mona go zadeklarowa na 4 sposoby:
a) char tab[10] = ”komputer”;
Deklaracja 10-cio elementowej tablicy ze znakami. Takiej tablicy zostaje przydzielonych 10 bajtów
pami ci. Je li zadeklarujemy wi kszy rozmiar tablicy ni liczba znaków napisu + 1, pozostałe komórki
automatycznie zapełni si zerami.
b) char tab[10] = { ’k’, ’o’, ’m’, ’p’, ’u’, ’t’, ’e’, ’r’ };
Inny, rzadko u ywany, ale poprawny sposób deklaracji.
c) char * tab = ”komputer”;
Deklaracja tablicy znaków za pomoc wska nika. W tym wypadku zmienna wska nikowa jak jest tab
wskazuje na pocz tek ła cucha znaków. Kompilator automatycznie przydziela odpowiedni rozmiar
pami ci.
d) char tab[ ] = ”komputer”;
W tym wypadku kompilator równie automatycznie przydziela odpowiedni rozmiar pami ci.
3. WPROWADZANIE I WYPROWADZANIE NAPISÓW
printf
Przykład1. Wyprowadzenie łacucha znaków na ekran
char tab[20] = ”to jest tekst”;
printf(”%s\n”, tab); //tekst jest wypisywany do napotkania znaku ‘\0’
printf(tab); //inny sposób
mgr in . Adam Id kowski
2
Metodyki i techniki programowania 1
2008/2009
scanf
Przykład 2. Wprowadzenie łacucha znaków z klawiatury
char tab[20]; //scanf czyta tylko slowa a nie cale wiersze
scanf(”%s”, tab); // nie musimy podawac znaku &, bo bufor jest wskaznikiem
gets
Funkcja gets umoliwia wprowadzenie wiersza (cigu znaków zakoczonego ‘\n’)
z klawiatury i umieszcza w obszarze pamici wskazywanym przez tab zastpujc ‘\n’
znakiem ‘\0’.
Przykład 3. Wprowadzenie łacucha znaków z klawiatury
char tab[20];
gets(tab);
printf(“Wprowadzono tekst: %s \n”, tab);
puts
Funkcja puts wypisuje na ekran zawarto łacucha znakowego (cig znaków
zakoczony znakiem ‘\0’) zastpujc znak ‘\0’ znakiem ‘\n’.
Przykład 4. Wyprowadzenie łacucha znaków na ekran
char tab[20] = “to jest tekst”;
puts(tab);
4. OPERACJE NA ŁA CUCHACH ZNAKÓW i ZNAKACH - FUNKCJE
Przykładowe funkcje z biblioteki string.h:
strlen( ) – podaje długo łacucha znaków (nie bierze pod uwag znaku ‘\0’),
strcpy( ) – kopiuje jeden łacuch do drugiego,
strcat( ) – łczy dwa łacuchy,
strcmp( ) – porównanie dwóch łacuchów z rozrónieniem liter małych i duych,
strlwr( ) – zamienia w danym łacuchu due litery na małe,
strupr( ) – zamienia w danym małe litery na due,
strrev( ) – odwraca kolejno liter w łacuchu.
mgr in . Adam Id kowski
3
Metodyki i techniki programowania 1
2008/2009
Konwersja danych, funkcje z biblioteki stdlib.h:
atof() - konwertuje łacuch znaków na liczb typu float
include<stdlib.h>
char tekst[50]="12.34";
float liczba;
liczba=atof(tekst);
atoi() - konwertuje łacuch znaków na liczb typu int
include<stdlib.h>
char tekst[50]="1234";
int liczba;
liczba=atoi(tekst);
atol() - konwertuje łacuch znaków na liczb typu long integer
itoa() - konwertuje liczb integer na łacuch znaków
include<stdlib.h>
int liczba=123;
char tekst[50];
itoa(liczba, tekst, 10);
//10 oznacza dziesitny system liczenia
Sprawdzanie znaku, konwersja, funkcje z biblioteki ctype.h:
isalnum() – sprawdza czy to znak alfanumeryczny
isalpha() – sprawdza czy to znak alfabetyczny
isascii() - sprawdza czy to znak ascii
isdigit() - sprawdza czy to cyfra
isgraph() - sprawdza czy jest graficzny
islower() – sprawdza czy to mała litera
ispunct() – sprawdza czy to znak interpunkcyjny
isspace() - sprawdza czy to spacja
isupper() – sprawdza czy to dua litera
toascii() –konwertuje znak na kod ascii
tolower() – konwertuje liter na mał
toupper() – konwertuje liter na du
mgr in . Adam Id kowski
4
Metodyki i techniki programowania 1
2008/2009
Przykład 5. Zastosowanie powyszych funkcji
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
char tab1[20] = “tekst w buforze”;
char tab2[20];
int dlugosc;
int rozmiar;
system(“cls”); // czysci ekran
printf(”napis1: %s \n”, tab1);
dlugosc = strlen(tab1);
printf(“liczba znakow w napisie1: %d \n“, dlugosc);
strupr(tab1);
printf(”napis1 duzymi literami: %s \n”, tab1);
strlwr(tab1);
printf(”napis1 malymi literami: %s \n”,tab1);
strcpy(tab2,tab1);
printf(”napis2: %s \n”, tab2);
strrev(tab2);
printf(“napis2 odwrocony: %s \n”, tab2);
getch();
}
PYTANIA KONTROLNE
1. Wyjanij pojcia: stała znakowa, wyraenie stałe, stała napisowa.
2. Jak deklarujemy łacuch znaków?
3. W jaki sposób moemy wyprowadzi łacuch znaków na ekran?
4. W jaki sposób moemy wprowadzi łacuch znaków z klawiatury?
5. Do czego słu funkcje: strlen(), strcpy(), strcmp()?
mgr in . Adam Id kowski
5
Metodyki i techniki programowania 1
2008/2009
ZADANIA
1. Napisz program sprawdzaj cy poprawno podawanego przez uytkownika hasła
według poniszego algorytmu. Zadeklaruj tre hasła jako wyraenie stałe.
Zadeklaruj tablic na podawane hasło. Porównuj podawane hasło
z zadeklarowanym. Program ma sprawdza hasło a do poprawnego wpisania.
W ptli skorzystaj z funkcji strcmp( ).
2.
Zmodyfikuj program z zadania 1. tak aby w przypadku błdnego podania hasła za
trzecim razem, program wywietlał napis ”KONTO ZABLOKOWANE” i program
koczył działanie.
3.
Napisz program, który wykona cztery podstawowe działania arytmetyczne na
ułamkach zwykłych. Dane wejciowe moesz podawa w postaci: 13/43 itp.
mgr in . Adam Id kowski
6