Tải bản đầy đủ (.pdf) (18 trang)

CHƯƠNG 7 CHUỔI KÝ TỰ (String) ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (501.55 KB, 18 trang )

CHƯƠNG 7CHƯƠNG 7
CHUỔI KÝ TỰCHUỔI KÝ TỰ
(String)(String)
(String)(String)
1. Giớithiệu1. Giớithiệu
1.

Giới

thiệu1.

Giới

thiệu
y Chuổilàm

tmản
g
k
ý
t

đư

ckết thúc

g
ý


bằng ký tự null (‘\0’).


y

tự
null
(

\
0

)


tự
dùng
để
kết

tự
null
(
\
0
)


tự
dùng
để
kết
thúc chuổi

y
Hằng
chuổi

chuổi
được
bao
quanh
bởi
y
Hằng
chuổi

chuổi
được
bao
quanh
bởi
cặpdấu nháy đôi. Ví dụ: "Hello"
2.2.
KhaiKhai
báobáo
vàvà
khởikhởi
tạotạo
chuổichuổi
2.

2.


KhaiKhai
báobáo
vàvà
khởikhởi
tạotạo
chuổichuổi
Có 2 cách khai báo và khởit

ochuổi

y Cách 1: Dùng mảng mộtchiều
h

biế
[
Chiề
dài
tối
đ
]

d
h
t
[12]
c
h
ar <

n

biế
n>
[
Chiề
u
dài
tối
đ
a
]

y

dụ
: c
h
ar s
t
r
[12]
;
Trong khai báo này, bộ nhớ sẽ cung




c

p12+1bytesđ


lưutr

n

idun
g
củachuỗikýtự str; byte cuối cùng lưu



\

để
kế

h ỗ
tr


tự

\
0

để
kế
tt

cc
h

u

i.
2. 2. KhaiKhai báobáo
v
à
v
àkhởikhởit

ot

ochuổichuổi
ạạ
Cách 2: Dùn
g
con trỏ
g
char *<Tên biến>
y
Ví dụ:
char *str;
T
kh i

à
bộ
hớ

dà h
2

T
ron
g
kh
a
i

on
ày
,
bộ
n
hớ
s


n
h
2
byte để lưutrữđịachỉ củabiếncontrỏ
t
đ
hỉ
đế


ơi
để
s
t

r
đ
an
g
c
hỉ
đế
n, c

acun
g
c

pn
ơi
để
lưutrữ dữ liệu.
2.2.
KhaiKhai
báobáo
vàvà
khởikhởi
tạotạo
chuổichuổi

2.

2.

KhaiKhai

báobáo
vàvà
khởikhởi
tạotạo
chuổichuổi

y Chuổik
ý
t

g
iốn
g
như mản
g
do đó đ

ý

g g
g
khởitạomộtchuổikýtự vớinhững giá
tr

xác đ

nh ta có th

th


chi

ntươn
g
t





g

như vớimảng.
char <Biến>[ ]=<”Hằng chuổi”>
2.2.
KhaiKhai
báobáo
vàvà
khởikhởi
tạotạo
chuổichuổi

2.

2.

KhaiKhai
báobáo
vàvà
khởikhởi

tạotạo
chuổichuổi

y
V
íd

:

char str[] = {‘H’, ’e’, ’l’, ’l’, ’o’, ’\0’};
char
str
[] =

Hello

;
char

str
[]

=

Hello ;
char *str = “Hello”;
3.3.
NhậpNhập
chuổichuổi
3.


3.

NhậpNhập
chuổichuổi
y Đ

nh
ập
dữ li

uchobiếnchuổi
,
ta dùn
g
ập

,
g
hàm gets() củathư việnstdio.h.
h * t(h *)h * t(h *)
y
Hàm
gets()
đọc
các

tự
từ
bàn

phím
c
h
ar
*
ge
t
s
(
c
h
ar
*
s
)
;c
h
ar
*
ge
t
s
(
c
h
ar
*
s
)
;

y
Hàm
gets()
đọc
các

tự
từ
bàn
phím
vào trong mảng trỏđếnbởischođến
khi
nhấn
Enter

tự
null
sẽ
được
đặt
khi
nhấn
Enter
.

tự
null
sẽ
được
đặt

sau ký tự cuối cùng củachuổinhậpvào
trong
mảng
trong
mảng
.
y Hoặctacóthể dùng cin >> s;
4.4.
XuấtXuất
chuổichuổi
4.

4.

XuấtXuất
chuổichuổi
y Đ

xuấtchuổiramànhình
,
ta dùn
g
hàm
,
g
puts() củathư việnstdio.h.
int
puts(const char *
s
);

y
Hoặc
ta

thể
dùng
cout
int
puts(const

char

*
s
);
y
Hoặc
ta

thể
dùng
cout
y cout << s;
VíVí
dụdụ
::
VíVí
dụdụ
::
#include <iostream.h>

#include <stdio.h>
int main()
{
{
char str[20];
cout
<<"
nhap
chuoi
:";
cout
<<"
nhap
chuoi
:";
gets(str);
cout
<<
"
\
nXuat
chuoi
:
"
;
cout
<<
\
nXuat
chuoi

:;
puts(str);
return 0;
return

0;
}
5.5.
CácCác
hàmhàm
thaothao
táctác
trêntrên
chuổichuổi
5.

5.

CácCác
hàmhàm
thaothao
táctác
trêntrên
chuổichuổi
y strcpy(s1, s2): Sao chép chuổis2 vàos1
í
d
V
í
d

ụ:
#include <iostream.h>
#include <
stdio h
>
#include <
stdio
.
h
>
#include <string.h>
void main
()
()
{
char str1[20], str2[20];
t
"
h
hi
1" t(t1)
cou
t
<<
"
n
h
ap c
h
uo

i
1
:
"
;

ge
t
s
(
s
t
r
1)
;
strcpy(str2,str1);
cout
<<
"
\
nXuat
chuoi
2:
"
; puts(str2);
cout
<<
\
nXuat
chuoi

2: ; puts(str2);
}
5.5.
CácCác
hàmhàm
thaothao
táctác
trêntrên
chuổichuổi
5.

5.

CácCác
hàmhàm
thaothao
táctác
trêntrên
chuổichuổi
y strcat(s1, s2): Nốichuổis2 vàocuốichuổis1

d
:

d

:
#include <iostream.h>
#include <stdio.h>
#include <string.h>

void main()
{
{
char str1[20], str2[20];
cout<<"nhap chuoi 1:"; gets(str1);
cout
<<"
\
nhap
chuoi
2:"; gets(str2);
cout
<<"
\
nhap
chuoi
2:"; gets(str2);
strcat(str1,str2);
cout<<"\nXuat chuoi sau khi noi:";
puts(str1);
}
5.5.
CácCác
hàmhàm
thaothao
táctác
trêntrên
chuổichuổi
5.


5.

CácCác
hàmhàm
thaothao
táctác
trêntrên
chuổichuổi
y strchr(s1, ch) : Trả về con trỏ đếnvị trí

t
hi

n
đ

tiên
c

a

t
ch
tong
ch

i
s
1
xu


t
hi

n
đ

u
tiên
c

a

t

ch
t
r
ong
ch
u

i
s
1
Ví dụ:
void main()
void main()
{
char *p, h, str1[20];

cou
t
<<"nhap chuoi 1:”;
g
ets(str1);
cout<<"Nhap ktu muon tim:"; cin>>h;
p=
strchr
(str1 h);
p=
strchr
(str1
,
h);
if(p==NULL) cout<<"Khong tim thay ";
else cout<<"Tim thay tai vi tri "<<(p-str1);
}
5.5.
CácCác
hàmhàm
thaothao
táctác
trêntrên
chuổichuổi
5.

5.

CácCác
hàmhàm

thaothao
táctác
trêntrên
chuổichuổi
y strstr(s1, s2): Trả về con trỏ đếnvị trí xuấthiện


đ

utiêncủachu

is2tron
g
s1.
Ví dụ:voidmain()
{
h
*
[
]
[
]
{
c
h
ar
*
p, str1
[
20

]
,str2
[
20
]
;
cout<<"nhap chuoi 1:"; gets(str1);
cout
<<
"
nhap
chuoi
2
:
"
;
gets(str
2
)
;
cout
<<
nhap
chuoi
2
:
;
gets(str
2
)

;
p= strstr(str1,str2);
if(p
==
NULL)
if(p NULL)
cout<<"Khong tim thay ";
else
cout<<"Tim thay tai vi tri "<<(p-str1);
}
6.6.
MảngMảng
cáccác
chuổichuổi
6.

6.

MảngMảng
cáccác
chuổichuổi
y Mản
g
các chuổilàm

tmản
g
k
ý
t


hai
g

g
ý

chiều. Kích thướccủachỉ mụcthứ nhất
là s

chuổivàkíchthướccủachỉ m

c

thứ hai xác định chiềudàilớnnhấtcủa
mỗichuổi.
Ví dụ: char str[5][80];
Khai
báo
một
mảng
của
5
chuổi
mỗi
Khai
báo
một
mảng
của

5
chuổi
,
mỗi
chuổicóchiềudàitối đalà79kýtự.
6.6.
MảngMảng
cáccác
chuổichuổi
6.

6.

MảngMảng
cáccác
chuổichuổi
y Khai báo
v
àkhởi
t

omản
g
các chuổi

g
char arrayList[][length] = {
constantString1,
constantString2,


constantStringN};
y Ví d

:

char listOfPL[][10] = {“Pascal”, “C++”, “C#”};
6.6.
MảngMảng
cáccác
chuổichuổi
6.

6.

MảngMảng
cáccác
chuổichuổi
Ví dụ:
void main()
{
h li t[5][20]
c
h
ar
li
s
t[5][20]
;
for(int i=0; i<5; i++)
{

{

cout<<"name"<<i<<":“; cin>>list[i];
}
}
for(int j=0; j<5; j++)
cout
<<
""
<<list[j];
cout
<<

<<list[j];
}
7.7.
MảngMảng
concon
trỏtrỏ
đếnđến
cáccác
chuổichuổi
7.

7.

MảngMảng
con

con


trỏtrỏ
đếnđến
cáccác
chuổichuổi
y Ngoài cách dùng mảng ký tự hai chiều để lưu


tr

mản
g
các chu

i, ta có th

dùn
g
mản
g
của
các con trỏ.Mỗicontrỏ sẽ chứa địachỉ của
chuổi
chuổi
y Ví dụ:
h
*
t
[
20

]
c
h
ar
*
s
t
r
[
20
]
;
void main()
{
{
char *name[5];
for(int i=0 ; i<5 ; i++)
name[i] = (char *)malloc(20);
for(int i=0 ; i<5 ; i++)
{
{
cout << "Input name " << i+1 <<": ";
gets(name[
i
]);
gets(name[
i
]);
}
c

ou
t << "List
o
f n
a
mes: "
;
ou
oa ;
for(int i=0 ; i<5 ; i++)
cout << name[i] << ", ";
}

×