– Giạo trçnh Láûp trçnh Pascal càn bn — – 52 — Trang 52 BI 8. KIÃØU XÁU K TỈÛ I. Khai bạo v cạc phẹp toạn: Xáu (String) l kiãøu dỉỵ liãûu cọ cáúu trục dng âãø xỉí l cạc xáu k tỉû. Kiãøu String cọ nhiãưu âiãøm tỉång tỉû nhỉ kiãøu mng (Array) nhỉng cng cọ âiãøm khạc nhau l: säú k tỉû trong mäüt biãún kiãøu xáu cọ thãø thay âäøi cn säú pháưn tỉí ca kiãøu mng ln cäú âënh. 1. Khai bạo kiãøu xáu: VAR Tãn _ Biãún : String[n]; Trong âọ: n l säú k tỉû täúi âa cọ thãø cọ ca xáu. Chiãưu di täúi âa ca mäüt xáu l 255. Nãúu trong pháưn khai bạo khäng ghi [n] thç xáu cọ âäü di màûc âënh l 255. 4 Vê dủ: Var HoTen : String[30]; { HoTen cọ thãø chỉïa täúi âa 30 k tỉû } St : String; { St cọ thãø chỉïa täúi âa 255 k tỉû } Våïi St l mäüt xáu, âãø chè ra cạc k tỉû thỉï i ca St ta viãút St[i]. Cạc St[i] âãưu cọ kiãøu Char . Vê dủ: St := ‘ABCD’; thç lãûnh Write(St[3]) s in ra k tỉû ‘C’. Cáúu trục ca String nhỉ sau: Trong bäü nhåï nọ chiãúm säú Byte bàòng säú k tỉû täúi âa, cäüng våïi mäüt byte âáưu tiãn (tải vë trê s[0]) chỉïa k tỉû m m tháûp phán ASCII ca k tỉû ny s cho biãút xáu âọ cọ âäü di bao nhiãu. Chàóng hản biãún HoTen bãn trãn âỉåüc gạn giạ trë: HoTen := ‘Ly Dong Giang’; Khi âọ, âäü di xáu chè l 13, màûc d âäü di cỉûc âải cho phẹp l 30 nhỉ â khai bạo. Sau âáy cáúu trục xáu HoTen : Ư Ghi chụ: K tỉû * biãøu diãùn k tỉû khäng xạc âënh. 2. Nháûp v in xáu k tỉû: Mún in mäüt xáu k tỉû ta dng lãûnh Write(St) hồûc Writeln(St). * Chr(13) L y D o n g G i a n g * * * * * * * * * 9 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 26 28 29 30 27 17 Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 53 Trang 53 Lóỷnh Readln(St) seợ õoỹc caùc kyù tổỷ cho xỏu St vồùi õọỹ daỡi thổỷc sổỷ laỡ sọỳ kyù tổỷ goợ vaỡo tổỡ baỡn phờm. Nóỳu ta goợ < Enter > luọn maỡ khọng nhỏỷp cho noù kyù tổỷ naỡo thỗ St laỡ xỏu rọựng. 4 Vờ duỷ: Var YourName, st1, st2 : String[40]; Begin Write( Please enter your name: ); Readln(YourName); Writeln( Hello , YourName + ! ); st1 := Turbo Pascal ; st2 := Borlands product is + st1; Writeln(st2); Readln; End. 3. Caùc pheùp toaùn trón xỏu kyù tổỷ: a. Pheùp gaùn: Bióỳn := Bióứu_thổùc; aỷi lổồỹng bón phaới cuớa lóỷnh phaới õổồỹc õỷt giổợa hai dỏỳu nhaùy õồn nóỳu õoù laỡ xỏu ồớ daỷng hũng. Ta coù thóứ sổớ duỷng dỏỳu cọỹng (+) õóứ gheùp caùc xỏu khi gaùn. Vờ duỷ: HoTen := Huynh Ngoc + Nhan; b. Pheùp nọỳi String: Kyù hióỷu bũng dỏỳu +. 4 Vờ duỷ: Turbo + Pascal = Turbo Pascal c. Caùc pheùp toaùn so saùnh: Khi so saùnh hai xỏu, caùc kyù tổỷ cuớa hai xỏu õổồỹc so saùnh tổỡng cỷp mọỹt tổỡ traùi qua phaới theo giaù trở trong baớng maợ ASCII. 4 Vờ duỷ: Nóỳu so saùnh: ABC = ABC coù giaù trở True . ABC = AB coù giaù trở laỡ False . ABCD < ABED coù giaù trở laỡ True . ABC > AD coù giaù trở laỡ False . Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 54 Trang 54 II. Caùc thuớ tuỷc vaỡ haỡm xổớ lyù xỏu kyù tổỷ: 1. Caùc thuớ tuỷc: a. Delete(St , Pos, Num): Trong õoù: - St (String) : Bióỳn kióứu String. - Pos (Position) : Bióỳn kióứu nguyón. - Num (Number) : Bióỳn kióứu nguyón. Cọng duỷng: Thuớ tuỷc naỡy duỡng õóứ xoùa khoới xỏu St mọỹt sọỳ Num kyù tổỷ bừt õỏửu tổỡ vở trờ thổù Pos. 4 Vờ duỷ: Nóỳu St = ABCDEFG; thỗ: Delete(St, 2, 4); laỡm cho St = AFG. Delete(St, 2, 10); laỡm cho St = A. Delete(St, 9, 3); laỡm cho St = ABCDEFG. b. Insert(St2, St1, Pos): Trong õoù: - St2 vaỡ St1 : Bióỳn kióứu String. - Pos : Bióỳn kióứu nguyón. Cọng duỷng: Thuớ tuỷc naỡy duỡng õóứ cheỡn xỏu St2 vaỡo xỏu St1 ồớ vở trờ Pos . Vờ duỷ: Nóỳu St := ABCD thỗ sau lóỷnh Insert(TFG, St, 3) ta nhỏỷn õổồỹc St := ABTFGCD. Trổồỡng hồỹp Pos vổồỹt quaù chióửu daỡi cuớa St1 thỗ St2 seợ õổồỹc nọỳi õuọi vaỡo St1. Vờ duỷ: St = ABCD , vỏỷy lóỷnh Insert(TFG, ST, 9); seợ laỡm cho St = ABCDTFG. c. Str(Value, St): Trong õoù: - Value : Laỡ mọỹt bióứu thổùc nguyón hay thổỷc coù ghi daỷng in ra. - St : Bióỳn kióứu String. Cọng duỷng: Thuớ tuỷc naỡy duỡng õóứ õọứi giaù trở sọỳ Value thaỡnh kióứu xỏu rọửi gaùn cho St . 4 Vờ duỷ: i := 1234; Str(i:5, St); { ta õổồỹc St = 1234 coù 5 kyù tổỷ } x :=123.5678901; Str(x:10:5, St); { ta õổồỹc St = 123.56789 } d. Val(St, Var, Code): Trong õoù: - St : Bióứu thổùc kióứu String. - Var : Laỡ bióỳn kióứu nguyón hay thổỷc. - Code : Bióỳn kióứu nguyón. – Giạo trçnh Láûp trçnh Pascal càn bn — – 55 — Trang 55 Cäng dủng: Th tủc ny âäøi xáu chỉỵ St (biãøu diãùn åí dảng säú ngun hay thỉûc) thnh säú v gạn cho biãún Var . Code l biãún ngun dng âãø phạt hiãûn läùi: nãúu phẹp biãún âäøi âụng thç Code cọ giạ trë 0 , nãúu sai do St khäng biãøu diãùn âụng säú ngun hay thỉûc thç Code s cọ giạ trë bàòng vë trê ca k tỉû sai trong xáu St . Vê dủ: Gi sỉí: St := ‘234’ , i v e l hai biãún ngun. Val(St, i, e); { cho ta i = 234 v e = 0 } Nãúu St := ‘21x’ thç Val(St, i, e) { cho ta i khäng xạc âënh v e = 3 , tỉïc l k tỉû thỉï ba gáy ra läùi } 4 Vê dủ vãư mäüt ỉïng dủng cọ sỉí dủng th tủc Val âãø âc säú ngun tỉì bn phêm. Bçnh thỉåìng ta dng th tủc Readln(i) âãø âc säú ngun i . Song nãúu nãúu trong lục nháûp säú, ta chàóng may g nháưm chỉỵ cại vo thç mạy dỉìng lải, cọ thãø gáy lng phê thåìi gian. Th tủc dỉåïi âáy cọ thãø bạo läùi nãúu ta nháûp mäüt säú cọ chỉỵ trong säú âọ. Procedure InputInteger(Var i : Integer); Var St : String[6]; e : Integer; Begin Repeat Readln(St); { Nháûp vo xáu säú ngun } Val(St, i, e); { Biãún âäøi v phạt hiãûn läùi } If e < > 0 then Writeln(#7, ’ Loi nhap lieu ! ‘); Until e = 0; End; 2. Cạc hm: a. Length(St): cho ta âäü di ca biãøu thỉïc xáu k tỉû St . Vê dủ: våïi St = ‘’ABCDEFG’ thç Length(St) s tr vãư giạ trë 7 . b. Copy(St, Pos, Num): Trong âọ: - St : Biãøu thỉïc kiãøu xáu k tỉ.û - Pos,Num : Biãøu thỉïc kiãøu ngun. Hm ny tr vãư cho ta mäüt xáu måïi tỉì xáu St , hm bàõt âáưu chẹp tỉì vë trê Pos v chẹp Num k tỉû. Vê dủ: St = ‘ABCDEF’ thç lãûnh Copy(St, 3, 2) = ‘CD’ v Copy(St, 4, 10) cho ta ‘DEF’. Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 56 Trang 56 ệ Ghi chuù: - Nóỳu Pos + Num > Length(St) thỗ haỡm seợ traớ vóử caùc kyù tổỷ trong xỏu St. - Nóỳu Pos > Length(St) thỗ haỡm Copy seợ traớ vóử cho ta mọỹt xỏu rọựng. c. Concat(St 1 , St 2 , ., St n ): Haỡm naỡy duỡng õóứ gheùp tỏỳt caớ caùc xỏu kyù tổỷ St1, St2, ., St n thaỡnh mọỹt xỏu theo thổù tổỷ caùc õọỳi sọỳ cung cỏỳp cho haỡm. ệ Ghi chuù: - Sọỳ lổồỹng õọỳi cuớa haỡm Concat phaới >= 2. - Nóỳu tọứng sọỳ chióửu daỡi caùc xỏu > 255 thỗ maùy seợ baùo lọựi. - Coù thóứ duỡng pheùp cọỹng (+) õóứ gheùp xỏu kyù tổỷ. Vờ duỷ: St :=Concat(St1,St2 + N); d. Pos(St1, St2): Trong õoù: St1, St2 laỡ bióứu thổùc xỏu kyù tổỷ. Haỡm naỡy traớ vóử sọỳ nguyón bióứu dióựn vở trờ õỏửu tión cuớa St1 gỷp trong xỏu St2 . Nóỳu khọng tỗm thỏỳy thỗ Pos = 0. 4 Vờ duỷ: nóỳu St := ABCDEFGBCD thỗ Pos(DE,St) = 4, Pos(BCD,St) = 2, Pos(XY,St) = 0. 4 Vờ duỷ 1: Vióỳt chổồng trỗnh nhỏỷp vaỡo tổỡ baỡn phờm mọỹt xỏu kyù tổỷ vaỡ in ra maỡn hỗnh xỏu kyù tổỷ ngổồỹc tổồng ổùng. Vờ duỷ: nhỏỷp TRUNG TAM CONG NGHE AVNET maùy in ra TENVA EHGN GNOC MAT GNURT. Program DaoChuoi; Uses CRT; Var Cau : String[80]; i : Byte; Begin Wite( Nhap vao mot cau : ); Readln(Cau); For i := Length(Cau) DownTo 1 do Write(Cau[i]); Readln; End. Giaùo trỗnh Lỏỷp trỗnh Pascal cn baớn 57 Trang 57 4 Vờ duỷ 2: Hióứn thở chuọựi con trong chuọựi meỷ õổồỹc nhỏỷp tổỡ baỡn phờm, vở trờ vaỡ sọỳ kyù tổỷ hióứn thở cuợng õổồỹc nhỏỷp tổỡ baỡn phờm. Program SubString; Uses CRT; Var St : String; Pos, Len : Byte; Begin Wite( Nhap vao mot chuoi : ); Readln(St); Wite( Muon hien thi xau tu vi tri nao : ); Readln(Pos); Wite( Do dai xau ky tu con : ); Readln(Len); Write( Xau ky tu con la : ,Copy(St, Pos, Len)); Readln; End. 4 Vờ duỷ 3: Vióỳt caùc haỡm chuyóứn õọứi xỏu kyù tổỷ thaỡnh chổợ hoa vaỡ chổợ thổồỡng. Function ToUpper(s : String) : String; Var i : Byte; Begin For i := Length(s) do s[i] := Upcase(s[i]); ToUpper := s; End; (******************************) Function ToLower(s : String) : String; Var i : Byte; Begin For i := Length(s) do If s[i] In ['A' 'Z'] then s[i] := Chr(Ord(s[i]) + 32); ToLower := s; End;