W07 teksty-tablice znakowe

W07 teksty-tablice znakowe, PWR - Informatyka W4, podstawy programowania
[ Pobierz całość w formacie PDF ]
DANE TEKSTOWE W J
Ę
ZYKU C - TABLICE ZNAKOWE
Stała tekstowa / łańcuchowa jest tablicą znaków zakończoną znakiem o kodzie:
0
np. stała łańcuchowa:
”Jestem tekstem”
ASCII
®
. . .
’J’
’e’
’s’
’t’
’e’
’m’
’ ’
’t’
’e’
’k’
’s’
’t’
’e’
’m’
’\0’
. . .
warto
ś
ci
®
. . .
74 101 115 116 101 109 32 116 101 107 115 116 101 109 0
. . .
adresy
®
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Definicje i inicjalizacje zmiennych „tekstowych”:
char
tekst[ ] = { ’J’, ’e ’, ’s ’, ’t ’, ’e ’, ’m ’, ’ ’, ’t ’, ’e ’, ’k ’, ’s ’, ’t ’, ’e ’, ’m ’, ’\0’ };
char
tekst2[ ] = { ”Jestem tekstem” };
char
tekst3[ ] = ”Jestem tekstem”;
char
tekst4[100] = ”Jestem tekstem”;
tekst5; //
wska
ź
nik na znak == wska
ź
nik na pocz
ą
tek ła
ń
cucha znaków
tekst5 = ”Jestem tekstem” ; //
przypisanie zmiennej
tekst5
adresu stałej tekstowej
*
tekst5 = tekst4 ;
//
poprawne przypisanie adresu tablicy
char
tekst6[100]; //
100-elementowa tablica znakow
tekst6 = ”Jestem tekstem” ; //

ę
dne przypisanie
!!!
memcpy( tekst6, ”Jestem tekstem”, 15 ); //
poprawne przypisanie
strcpy ( tekst6, ”Jestem tekstem” );
//
poprawne przypisanie
Przykładowe operacje na pojedynczych literach tekstu:
tekst[1] = ’E’;
//
zamiana drugiej litery na du
Ŝą
tekst[2] = tekst[2] – 32;
//
zamiana trzeciej litery na du
Ŝą
(?)
tekst[3] = toupper( tekst[3] );
//
zamiana czwartej litery na du
Ŝą
for( int i=4; i<10; i++)
tekst[ i ] = toupper( tekst[ i ] );
//
zamiana kolejnych sze
ś
ciu liter
tekst[5] = ’\0’;
//
skrócenie tekstu do 5 liter
for(
int
i=0; tekst[ i ] != ’\0’ ; i++)
cout << tekst[ i ];
//
wydrukowanie zawarto
ś
ci tekstu (1)
for(
char
* wsk=tekst; *wsk ; wsk++)
cout << *wsk;
//
wydrukowanie zawarto
ś
ci tekstu (2)
M. Piasecki, JĘZYKI PROGRAMOWANIA 1
str. 1
(W7) Dane tekstowe - tablice znaków
char
Przykład przetwarzania tekstów ® dodanie rozszerzenia „
*.txt
” na końcu nazwy pliku
#include <iostream.h>
void main(void)
{
char nazwa[100];
cout << ”
Podaj nazwe pliku:
”;
cin.getline(nazwa,100);
for(i=0; nazwa[i] != ’\0’; i++)
if( nazwa[i] == ’.’)
poz_kropki=i;
//
sprawdzenie obecno
ś
ci rozszerzenia txt
bool jest_txt=false;
if(poz_kropki!=-1)
if( nazwa[poz_kropki+1]==’t’ && nazwa[poz_kropki+2]==’x’ &&
nazwa[poz_kropki+3]==’t’ && nazwa[poz_kropki+4]==’\0’ )
jest_txt=true;
//
je
Ŝ
eli nie ma rozszerzenia ".txt" to dopisujemy je na ko
ń
cu nazwy
if( !jest_txt )
{
nazwa[i+0] = ’.’;
//
zmienna '
i
' nadal wskazuje koniec nazwy
nazwa[i+1] = ’t’;
nazwa[i+2] = ’x’;
nazwa[i+3] = ’t’;
nazwa[i+4] = ’\0’;
}
//
// To samo co powy
Ŝ
ej, ale z wykorzystaniem gotowych funkcji <string.h>
//
char* poz_kropki=
strrchr
(nazwa,'.');
//
bool jest_txt=false;
//
if( poz_kropki &&
strcmp
( poz_kropki,".txt" )==0 )
//
jest_txt=true;
//
if( !jest_txt )
//
strcat
(nazwa,".txt");
//
wy
ś
wietlenie wyniku – nazwy z rozszerzeniem
txt
na ko
ń
cu
cout << endl << endl;
cout << ”
Nazwa z rozszerzeniem \”txt\” = [
” << nazwa << ”
]
”;
cout << ”
Nacisnij ENTER, aby zakonczyc program
”;
cin.get();
}
M. Piasecki, JĘZYKI PROGRAMOWANIA 1
str. 2
(W7) Dane tekstowe - tablice znaków
//
poszukiwanie ostatniej kropki w ła
ń
cuchu
int i, poz_kropki=-1;
Funkcje operuj
ą
ce na ła
ń
cuchach znaków
<string.h>
Funkcja kopiowania zawartości jednej tablicy znakowej do drugiej (ang. „
str
ing
c
o
py
”).
Prototyp:
char
*strcpy(
char
*dest,
const char
*src);
//
przykładowa implementacja (z wykorzystaniem zapisu „indeksowego”)
char
*
strcpy(
char
tekst_wyj[ ],
char
tekst_wej[ ] )
{
int
i = 0;
while
( ( tekst_wyj[ i ] = tekst_wej[ i ] ) != ‘\0’ )
i++;
return
( tekst_wyj );
}
//
kopiowanie jednego ła
ń
cucha do drugiego
®
wersja wska
ź
nikowa (1)
char
*
strcpy
(
char
*
tekst_wyj,
char
*
tekst_wej )
pocz=tekst_wyj;
while
( (
*
*
tekst_wyj =
*
tekst_wej ) != ‘\0’ )
{
tekst_wyj++;
tekst_wej++;
}
return
( pocz );
}
//
funkcja kopiuj
ą
ca ła
ń
cuchy
-
wersja wska
ź
nikowa (2)
char
*
strcpy
(
char
*
tekst_wyj,
char
*tekst_wej )
pocz=tekst_wyj;
while
(
*
*
tekst_wyj++ =
*
tekst_wej++ ) ;
return
( pocz );
}
//
kopiowanie, z ograniczeniem długo
ś
ci kopiowanego ła
ń
cucha
char
*
str
n
cpy
(
char
tekst_wyj[ ],
char
tekst_wej[ ],
unsigned
maks_dlugosc )
{
int
i = 0;
while
( ( tekst_wyj[ i ] = tekst_wej[ i ] ) != ‘\0’ && i < maks_dlugosc )
i++;
return
( tekst_wyj );
}
M. Piasecki, JĘZYKI PROGRAMOWANIA 1
str. 3
(W7) Dane tekstowe - tablice znaków
{
char
{
char
Funkcja porównująca teksty:
int
strcmp (
char
*
tekst_1,
char
*
tekst_2 )
(
ang. „
str
ing
c
o
mp
are”
)
funkcja zwraca wartość: < 0 gdy tekst_1 < tekst_2
= 0 gdy tekst_1 == tekst_2
> 0 gdy tekst_1 > tekst_2
int
strcmp
(
char
tekst_1[ ],
char
tekst_2[ ] )
//
wersja tablicowa
{
int
i = 0;
while
( tekst_1[ i ] == tekst_2[ i ] )
if
( tekst_1[ i++ ] == ‘\0’ )
return
( 0 );
return
( tekst_1[ i ]
-
tekst_2[ i ] );
}
int
strcmp
(
char
*
tekst_1,
char
*
tekst_2 )
//
wersja wska
ź
nikowa (1)
{
while
(
*
tekst_1 ==
*
tekst_2 )
{
if
(
tekst_1 == ‘\0’ )
return
( 0 );
tekst_1 = tekst_1 + 1;
tekst_2 = tekst_2 + 1 ;
}
return
(
*
*
tekst_1
-
*
tekst_2 );
}
int
strcmp
(
char
*
tekst_1,
char
*
tekst_2 )
//
wersja wska
ź
nikowa (2)
{
for
( ;
*
tekst_1 ==
*
tekst_2 ; tekst_2++ )
tekst_1++ )
return
( 0 );
return
(
*
*
tekst_1
-
*
tekst_2 );
}
. . .
//
przykładowe zastosowanie funkcji
strcmp
char
tekst[100];
cin >> tekst;
if
( strcmp( tekst , ”Kowalski” )==0 )
cout
<< ”Podales tekst: \”Kowalski\” ”;
. . .
M. Piasecki, JĘZYKI PROGRAMOWANIA 1
str. 4
(W7) Dane tekstowe - tablice znaków
if
( !
 Inne wybrane funkcje z biblioteki <
string.h
>
size_t
strlen
(
const char
*
s )
od ang. „
str
ing
len
gth ”
Funkcja wyznacza i zwraca długość (ilość znaków) łańcucha
s
(bez znaku ‘\0’)
char
*
strcat
(
char
*
dest,
const char
*
src )
od ang. „
str
ing con
cat
enate ”
Funkcja dodaje łańcuch
src
(
ang. source
) do łańcucha
dest
(
ang. destination
)
Zwraca wskaźnik na połączony łańcuch (
dest
)
char
*
strchr
(
const char
*
s,
int
c )
od ang. „
str
ing
ch
a
r

Funkcja szuka pierwszego wystąpienia znaku
c
w podanym łańcuchu
s
Zwraca wskaźnik na znalezioną pozycję wystąpienia lub adres
NULL
.
char
*
strrchr
(
char
*
s,
int
c )
od ang. „
str
ing
r
ight
ch
a
r

Funkcja szuka ostatniego wystąpienia znaku
c
w podanym łańcuchu
s
Zwraca wskaźnik na znalezioną pozycję wystąpienia lub adres
NULL
.
char
*
strstr
(
char
*
s,
const char
*
sub )
od ang. „ scans
str
ing for sub
str
ing ”
Funkcja szuka pierwszego wystąpienia łańcucha
sub
w podanym łańcuchu
s
Zwraca wskaźnik na znalezioną pozycję wystąpienia lub adres
NULL
.
char
*
strupr
(
char
*
s )
od ang. „
str
ing
up
pe
r

Funkcja zamienia zawartość łańcucha
s
na duŜe litery
char
*
strlwr
(
char
*
s )
od ang. „
str
ing
l
o
w
e
r

Funkcja zamienia zawartość łańcucha
s
na małe litery
M. Piasecki, JĘZYKI PROGRAMOWANIA 1
str. 5
(W7) Dane tekstowe - tablice znaków
[ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • diabelki.xlx.pl
  • Podobne
    Powered by wordpress | Theme: simpletex | © Spojrzeliśmy na siebie szukając słów, które nie istniały.