Xem mẫu
- Updatesofts.com Ebooks Team
Xâu kí t
Trong t t c các chương trình chúng ta ñã th y cho ñ n gi , chúng ta ch s d ng các bi n
ki u s , ch dùng ñ bi u di n các s . Nhưng bên c nh các bi n ki u s còn có các xâu kí
t , chúng cho phép chúng ta bi u di n các chu i kí t như là các t , câu, ño n văn b n...
Cho ñ n gi chúng ta m i ch dùng chúng dư i d ng h ng ch ch a quan tâm ñ n các
bi n có th ch a chúng.
Trong C++ không có ki u d li u cơ b n ñ lưu các xâu kí t . ð có th th a mãn nhu
c u này, ngư i ta s d ng m ng có ki u char. Hãy nh r ng ki u d li u này (char) ch
có th lưu tr m t kí t ñơn, b i v y nó ñư c dùng ñ t o ra xâu c a các kí t ñơn.
Ví d , m ng sau (hay là xâu kí t ):
char jenny [20];
có th lưu m t xâu kí t v i ñ dài c c ñ i là 20 kí t . B n có th tư ng tư ng nó như
sau:
Kích thư c c c ñ i này không c n ph i luôn luôn dùng ñ n. Ví d , jenny có th lưu xâu
Vì các m ng kí t có th lưu các xâu kí t ng n hơn
"Hello" hay "Merry christmas".
ñ dài c a nó, trong C++ ñã có m t quy ư c ñ k t thúc m t n i dung c a m t xâu kí t
b ng m t kí t null, có th ñư c vi t là '\0'.
Chúng ta có th bi u di n jenny (m t m ng có 20 ph n t ki u char) khi lưu tr xâu kí
t "Hello" và "Merry Christmas" theo cách sau:
Chú ý r ng sau n i dung c a xâu, m t kí t null ('\0') ñư c dùng ñ báo hi u k t thúc
xâu. Nh ng ô màu xám bi u di n nh ng giá tr không xác ñ nh.
Kh i t o các xâu kí t .
Vì nh ng xâu kí t là nh ng m ng bình thư ng nên chúng cũng như các m ng khác. Ví
d , n u chúng ta mu n kh i t o m t xâu kí t v i nh ng giá tr xác ñ nh chúng ta có th
làm ñi u ñó tương t như v i các m ng khác:
Trang 48
- Updatesofts.com Ebooks Team
char mystring[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
Tuy nhiên, chúng ta có th kh i t o giá tr cho m t xâu kí t b ng cách khác: s d ng các
h ng xâu kí t .
Trong các bi u th c chúng ta ñã s d ng trong các ví d trong các chương trư c các h ng
xâu kí t ñ xu t hi n vài l n. Chúng ñư c bi u di n trong c p ngo c kép ("), ví d :
"the result is: "
là m t h ng xâu kí t chúng ta s d ng m t s ch .
Không gi ng như d u nháy ñơn (') cho phép bi u di n h ng kí t , c p ngo c kép (") là
h ng bi u di n m t chu i kí t liên ti p, và cu i chu i m t kí t null ('\0') luôn ñư c
t ñ ng thêm vào.
Vì v y chúng ta có th kh i t o xâu mystring theo m t trong hai cách sau ñây:
char mystring [] = { 'H', 'e', 'l', 'l', 'o', '\0' };
char mystring [] = "Hello";
Trong c hai trư ng h p m ng (hay xâu kí t ) mystring ñư c khai báo v i kích thư c 6
kí t : 5 kí t bi u di n Hello c ng v i m t kí t null.
Trư c khi ti p t c, tôi c n ph i nh c nh b n r ng vi c gán nhi u h ng như vi c s d ng
d u ngo c kép (") ch h p l khi kh i t o m ng, t c là lúc khai báo m ng. Các bi u th c
trong chương trình như:
mystring = "Hello";
mystring[] = "Hello";
là không h p l , c câu l nh dư i ñây cũng v y:
mystring = { 'H', 'e', 'l', 'l', 'o', '\0' };
V y hãy nh : Chúng ta ch có th "gán" nhi u h ng cho m t m ng vào lúc kh i t o nó.
Nguyên nhân là m t thao tác gán (=) không th nh n v trái là c m t m ng mà ch có th
nh n m t trong nh ng ph n t c a nó. Vào th i ñi m kh i t o m ng là m t trư ng h p
ñ c bi t, vì nó không th c s là m t l nh gán m c dù nó s d ng d u b ng (=).
Gán giá tr cho xâu kí t
Vì v trái c a m t l nh gán ch có th là m t ph n t c a m ng ch không th là c m ng,
chúng ta có th gán m t xâu kí t cho m t m ng ki u char s d ng m t phương pháp
như sau:
mystring[0] = 'H';
mystring[1] = 'e';
Trang 49
- Updatesofts.com Ebooks Team
mystring[2] = 'l';
mystring[3] = 'l';
mystring[4] = 'o';
mystring[5] = '\0';
Nhưng rõ ràng ñây không ph i là m t phương pháp th c t . ð gán giá tr cho m t xâu kí
t , chúng ta có th s d ng lo t hàm ki u strcpy (string copy), hàm này ñư c ñ nh
nghĩa trong string.h và có th ñư c g i như sau:
strcpy (string1, string2);
L nh này copy n i dung c a string2 sang string1. string2 có th là m t m ng, con
tr hay m t h ng xâu kí t , b i v y l nh sau ñây là m t cách ñúng ñ gán xâu h ng
"Hello" cho mystring:
strcpy (mystring, "Hello");
Ví d :
J. Soulie
// setting value to string
#include
#include
int main ()
{
char szMyName [20];
strcpy (szMyName,"J. Soulie");
cout
- Updatesofts.com Ebooks Team
{
char szMyName [20];
setstring (szMyName,"J. Soulie");
cout
- Updatesofts.com Ebooks Team
xâu kí t thay cho cin.getline. Ví d , trong chươn trình c a chúng ta, khi chúng ta
mu n nh n d li u t ngư i dùng chúng ta có th vi t:
cin >> mybuffer;
l nh này s làm vi c như nó có nh ng h n ch sau mà cin.getline không có:
• Nó ch có th nh n nh ng t ñơn (không nh n ñư c c câu) vì phương th c này
s d ng kí t tr ng(bao g m c d u cách, d u tab và d u xu ng dòng) làm d u
hi u k t thúc..
• Nó không cho phép ch ñ nh kích thư c cho b ñ m. Chương trình c a b n có th
ch y không n ñ nh n u d li u vào l n hơn kích c c a m ng ch a nó.
Vì nh ng nguyên nhân trên, khi mu n nh p vào các xâu kí t b n nên s d ng
cin.getline thay vì cin >>.
Chuy n ñ i xâu kí t sang các ki u khác.
Vì m t xâu kí t có th bi u di n nhi u ki u d li u khác như d ng s nên vi c chuy n
ñ i n i dung như v y sang d ng s là r t h u ích. Ví d , m t xâu có th mang giá tr
"1977"nhưng ñó là m t chu i g m 5 kí t (k c kí t null) và không d gì chuy n thành
m t s nguyên. Vì v y thư vi n cstdlib (stdlib.h) ñã cung c p 3 macro/hàm h u ích
sau:
• atoi: chuy n xâu thành ki u int.
• atol: chuy n xâu thành ki u long.
• atof: chuy n xâu thành ki u float.
T t c các hàm này nh n m t tham s và tr v giá tr s (int, long ho c float). Các
hàm này khi k t h p v i phương th c getline c a cin là m t cách ñáng tin c y hơn
phương th c cin>> c ñi n khi yêu c u ngư i s d ng nh p vào m t s :
Enter price: 2.75
// cin and ato* functions
Enter quantity: 21
#include
Total price: 57.75
#include
int main ()
{
char mybuffer [100];
float price;
int quantity;
cout
- Updatesofts.com Ebooks Team
return 0;
}
Các hàm ñ thao tác trên chu i
Thư vi n cstring (string.h) không ch có hàm strcpy mà còn có nhi u hàm khác ñ
thao tác trên chu i. Dư i ñây là gi i thi u lư t qua c a các hàm thông d ng nh t:
strcat: char* strcat (char* dest, const char* src);
G n thêm chu i src vào phía cu i c a dest. Tr v dest.
strcmp: int strcmp (const char* string1, const char* string2);
So sánh hai xâu string1 và string2. Tr v 0 n u hai xâu là b ng nhau.
strcpy: char* strcpy (char* dest, const char* src);
Copy n i dung c a src cho dest. Tr v dest.
strlen: size_t strlen (const char* string);
Tr v ñ dài c a string.
Chú ý: char* hoàn toàn tương ñương v i char[]
Trang 53
- Updatesofts.com Ebooks Team
Con tr
Chúng ta ñã bi t các bi n chính là các ô nh mà chúng ta có th truy xu t dư i các tên.
Các bi n này ñư c lưu tr t i nh ng ch c th trong b nh . ð i v i chương trình c a
chúng ta, b nh máy tính ch là m t dãy g m các ô nh 1 byte, m i ô có m t ñ a ch xác
ñ nh.
M t s mô hình t t ñ i v i b nh máy tính chính là m t ph trong m t thành ph . Trên
m t ph t t c các ngôi nhà ñ u ñư c ñánh s tu n t v i m t cái tên duy nh t nên n u
chúng ta nói ñ n s 27 ph Tr n Hưng ð o thì chúng ta có th tìm ñư c nơi ñó mà không
l m l n vì ch có m t ngôi nhà v i s như v y.
Cũng v i cách t ch c tương t như vi c ñánh s các ngôi nhà, h ñi u hành t ch c b
nh thành nh ng s ñơn nh t, tu n t , nên n u chúng ta nói ñ n v trí 1776 trong b nh
chúng ta bi t chính xác ô nh ñó vì ch có m t v trí v i ñ a ch như v y.
Toán t l y ñ a ch (&).
Vào th i ñi m mà chúng ta khai báo m t bi n thì nó ph i ñư c lưu tr trong m t v trí c
th trong b nh . Nói chung chúng ta không quy t ñ nh nơi nào bi n ñó ñư c ñ t - th t
may m n r ng ñi u ñó ñã ñư c làm t ñ ng b i trình biên d ch và h ñi u hành, nhưng
m t khi h ñi u hành ñã gán m t ñ a ch cho bi n thì chúng ta có th mu n bi t bi n ñó
ñư c lưu tr ñâu.
ði u này có th ñư c th c hi n b ng cách ñ t trư c tên bi n m t d u và (&), có nghĩa là
"ñ a ch c a". Ví d :
ted = &andy;
s gán cho bi n ted ñ a ch c a bi n andy, vì khi ñ t trư c tên bi n andy d u và (&)
chúng ta không còn nói ñ n n i dung c a bi n ñó mà ch nói ñ n ñ a ch c a nó trong b
nh .
Gi s r ng bi n andy ñư c ñ t ô nh có ñ a ch 1776 và chúng ta vi t như sau:
andy = 25;
fred = andy;
ted = &andy;
k t qu s gi ng như trong sơ ñ dư i ñây:
Trang 54
- Updatesofts.com Ebooks Team
Chúng ta ñã gán cho fred n i dung c a bi n andy như chúng ta ñã làm r t l n nhi u khác
trong nh ng ph n trư c nhưng v i bi n ted chúng ta ñã gán ñ a ch mà h ñi u hành lưu
giá tr c a bi n andy, chúng ta v a gi s nó là 1776.
Nh ng bi n lưu tr ñ a ch c a m t bi n khác (như ted trong ví d trư c) ñư c g i là
con tr . Trong C++ con tr có r t nhi u ưu ñi m và chúng ñư c s d ng r t thư ng
xuyên, Ti p theo chúng ta s th y các bi n ki u này ñư c khai báo như th nào.
Toán t tham chi u (*)
B ng cách s d ng con tr chúng ta có th truy xu t tr c ti p ñ n giá tr ñư c lưu tr
trong bi n ñư c tr b i nó b ng cách ñ trư c tên bi n con tr m t d u sao (*) - ñây có
th ñư c d ch là "giá tr ñư c tr b i". Vì v y, n u chúng ta vi t:
beth = *ted;
(chúng ta có th ñ c nó là: "beth b ng giá tr ñư c tr b i ted" beth s mang giá tr 25, vì
ted b ng 1776 và giá tr tr b i 1776 là 25.
B n ph i phân bi t ñư c r ng ted có giá tr 1776, nhưng *ted (v i m t d u sao ñ ng
trư c) tr t i giá tr ñư c lưu tr trong ñ a ch 1776, ñó là 25. Hãy chú ý s khác bi t gi a
vi c có hay không có d u sao tham chi u.
beth = ted; // beth b ng ted ( 1776 )
// beth b ng giá tr ñư c tr
beth = *ted; b i( 25 )
Toán t l y ñ a ch (&)
Trang 55
nguon tai.lieu . vn