OPERACJE NA TEKSTACH
Teksty przechowuje się w tablicach typu char. W tablicy możemy zapamiętać dowolnie długi tekst w postaci łańcucha znaków.
1. char nazwisko[ ] = " ABCDEFGH " ; // powoduje utworzenie tablicy o nazwie nazwisko zawierającej 9 a nie 8 elementów, gdyż ostatnim znakiem tekstu jest znak kończący '\0'
Inicjując tablicę łańcuchem znaków, używamy znaku cudzysłowu "
Przy zapisywaniu pojedynczego znaku wykorzystujemy znak apostrofu ' .
2. char nazwisko [8] = " ABCDEFGH "; // deklaracja błędna, ponieważ brakuje miejsca na znak kończący ' \ 0'.
3. char *nazwisko = " ABCDEFGH " ; // tekst o określonej długości - zadeklarowano wskaźnik nazwisko, wskazujący na początek podanego tekstu (stałej tekstowej).
cout << nazwisko; // wydruk tekstu
4 while ( *nazwisko ) // w przypadku, gdy istnieje potrzeba wydrukowania fragmentu
cout << *nazwisko + + ; // tekstu lub gdy trzeba wykonać pewne operacje na tekście
w trakcie wydruku.
Instrukcja 4-ta jest równoważna fragmentowi :
4a while ( *nazwisko ) // wyprowadzenie znaku wskazywanego przez wskaźnik nazwisko
{
cout << * nazwisko ;
nazwisko + + ; // zwiększenie wskaźnika
}
Gdy chcemy następnie wykonać jakąkolwiek operację na tekście, to musimy dodatkowo zadeklarować wskaźnik pomocniczy, któremu należy przypisać wskazanie na początek tekstu np.
5. char *nazwisko = " ABCDEFGH " ;
char *nz ; // deklaracja wskaźnika pomocniczego
// nz - będzie wskazywał na początek tekstu
5a nz = nazwisko ;
while ( *nz )
cout << *nz + + ;
Wyznaczenie długości tekstu można zrealizować:
6) dl = 0 ;
nz = nazwisko ;
while ( *nz + + )
dl + + ;
cout << " Długość tekstu " << dl ;
W przypadku gdy zachodzi konieczność modyfikacji tekstu, stosujemy deklarację:
char nazwisko[ ] = " ABCDEFGH " ; // Przy tej deklaracji możliwe jest wczytanie pewnego
7) tekstu z zewnątrz, nie większego niż 8 znaków przy pomocy instrukcji
for ( int i = 0 ; i <n ; i + + )
cin >> nazwisko[ i ] ;
Aby wczytać zupełnie nowy tekst, należy napisać:
8) cin >> nazwisko ;
Ćwiczenie 1
Napisać program składający się z podprogramów :
wyświetlającego tekst w postać alfabetu od a do z
uzupełniającego tekst do 8 znaków gdy tekst ma mniej niż 8 liter ( dwoma poznanymi sposobami )
wyświetlającego nowy podany tekst
np. okno programu może mieć postać:
Podaj długość tekstu ( <=8 )
... (np. 6)
Podaj tekst
... (np. Kowal)
Kowal - wyświetli napis Kowal
KowalFGH - uzupełni napis Kowal do ośmiu liter pierwszym sposobem
KowalFGH - uzupełni napis Kowal do ośmiu liter drugim sposobem
Długość tekstu 8 - wyświetli napis
Podaj tekst
.... (np. Jan)
Wczytany tekst: Jan
Rozwiązanie
.......................
.......................
Jeżeli chcemy wykonywać pewne operacje na dowolnych tekstach, to musimy zdeklarować tablicę znaków, w której tekst się zmieści:
9) char litery [100] ;
Do wpisywania tekstu do tablicy ( np. kolejnych liter alfabetu ) możemy wykorzystać instrukcję:
char lit ; int i ;
10) for ( lit ='a' , i = 0 ; lit <= 'z' ; lit + +, i + + )
litery[ i ] = lit ;
Trzeba także dodać instrukcję znaku kończącego tekst
litery [ i ] = ' \ 0 ' ;
Wydruk zdefiniowanego tekstu lub jego fragmentu możemy realizować :
cout << litery ; // wydruk całego tekstu
for ( i = 0 ; i < 10 ; i + + ) // wydruk fragmentu tekstu tablicy (zastosowano indeksowanie )
cout << litery[ i ] ; // zostanie wyprowadzonych pierwszych 10 liter )
cout << endl ;
for ( i = 0 ; i < 10 ; i + + ) // wykorzystanie faktu, że nazwa tablicy podaje adres
cout << *( litery + i ) ; // jej pierwszego elementu
cout << endl ;
Można też do wydruku części końcowych liter tekstu wykorzystać konstrukcję analogiczną jak
w ćwiczeniu 1
char *wsk ;
wsk = litery ;
wsk + = 10 ; // zwiększenie wskaźnika o 10
while ( *wsk ) // wyprowadzenie i wydruk liter tekstu poczynając od 11 litery
cout << *wsk + + ;
Koniecznie trzeba utworzyć wskaźnik wsk z tego względu, że nazwa tablicy podaje zawsze adres jej pierwszego elementu).
Ćwiczenie 2
Napisać program składający się z podprogramów :
drukującego tekst w postać alfabetu od a do z
drukującego pierwsze 10 liter alfabetu ( dwoma poznanymi sposobami )
drukującego ( końcowy fragment ) tekstu od 11-tej litery alfabetu.
np. okno programu może mieć postać:
Program drukuje tekst w postaci alfabetu od a do z
abcdefg......z
Program drukuje pierwsze 10 liter alfabetu
abcdefghij - pierwszym sposobem
abcdefghij - drugim sposobem
Program drukuje koncowy fragment tekstu od 11 litery
klmnop ..... z
Składowe programu:
- Wygenerowanie tekstu
- Wydruk początkowego fragmentu tekstu (pierwszy sposób)
- Wydruk początkowego fragmentu tekstu (drugi sposób)
- Wydruk końcowy fragmentu tekstu od 11 litery
Operacje na tekstach
4