intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Hệ UNIX - Ngôn Ngữ C, ANSI C, ISO C, C++ phần 7

Chia sẻ: Dqwdqwdqwd Dqwfwef | Ngày: | Loại File: PDF | Số trang:8

77
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

C đã được tạo ra với một mục tiêu là làm cho nó thuận tiện để viết các chương trình lớn với số lỗi ít hơn trong mẫu hình lập trình thủ tục mà lại không đặt gánh nặng lên vai người viết ra trình dịch C

Chủ đề:
Lưu

Nội dung Text: Hệ UNIX - Ngôn Ngữ C, ANSI C, ISO C, C++ phần 7

  1. 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
  2. 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
  3. 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
  4. Updatesofts.com Ebooks Team { char szMyName [20]; setstring (szMyName,"J. Soulie"); cout
  5. 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
  6. 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
  7. 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
  8. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2