Lập trình với xâu ký tự

Download Report

Transcript Lập trình với xâu ký tự

HỌC VIỆN QUÂN Y Bộ môn Toán – Tin học

Lập trình với xâu ký tự

Người trình bày: Hoàng Anh

Nội dung

I.

II.

III.

Khái niệm về dữ liệu kiểu xâu ký tự Lập trình với dữ liệu xâu ký tự Một số ví dụ lập trình với dữ liệu xâu ký tự

• •

I.

Khái niệm về dữ liệu kiểu xâu ký tự

Khai báo xâu ký tự:

Xâu ký tự được khai báo bằng từ khoá STRING[n] vói n là một số nguyên chỉ độ dài cực đại của xâu.

Ví dụ: Var x1: String[20]; st: String[80];

Độ dài thực của xâu ký tự:

Là số ký tự mà xâu ký tự thực chứa. Độ dài thực luôn nhỏ hơn hoặc bằng độ dài cực đại. Trong bộ nhớ, xâu ký tự chiếm một số byte bằng độ dài cực đại cộng thêm 1 byte đầu tiên để chứa độ dài thực. Khi gán giá trị trị cho xâu ký tự, độ dài thực của xâu được lưu trữ trong byte đầu tiên này Ví dụ x1 := ‘Ho va Ten’; Độ dài thực = 9 Độ dài thực của xâu

st

được truy cập bằng hàm

Length(st)

Độ dài cực đại = 20

I.

Khái niệm về dữ liệu kiểu xâu ký tự

Xâu ký tự và mảng ký tự:

Xâu ký tự có thể được hiểu như một mảng ký tự có chỉ số chạy từ 0 đến độ dài cực đại. Phần tử thứ 0 chứa độ dài thực của xâu. Điểm khác biệt giữa xâu ký tự và mảng ký tự là mảng ký tự có độ dài cố định còn độ dài của xâu ký tự có thể thay đổi được Các phần tử của xâu ký tự có thể truy cập được thông qua tên của xâu và chỉ số đặt trong cặp ngoặc vuông như khi truy cập vào các phần tử của mảng. Chỉ số này có thể chạy từ 1 đến độ dài cực đại của xâu.

x1 Chỉ số 9 0 H 1 o v a T e 2 3 4 5 6 7

Cấu trúc dữ liệu xâu ký tự

8 n 9

II. Lập trình với xâu ký tự

1.

Phép nối xâu

st := ‘Ho va ’ + ‘Ten’ ; st := st + ‘Khong ro’

2.

Phép so sánh hai xâu ký tự

cho kết quả st = ‘Ho va Ten’ cho kết quả st = ‘Ho va TenKhong ro’

Nguyên tắc:

So sánh từng ký tự tương ứng trong hai xâu theo thứ tự từ trái qua phải theo giá trị của bảng mã ASCII cho đến khi xuất hiện ký tự khác nhau.

Hai xâu ký tự bằng nhau nếu chúng giống nhau cả về nội dung và độ dài Xâu chứa ký tự có mã ASCII nhỏ hơn mã ASCII của ký tự tương ứng trong xâu so sánh với nó được coi là nhỏ hơn Nếu hai xâu có độ dài khác nhau song có tất cả các ký tự giống nhau đến độ dài xâu ngắn hơn thì xâu có độ dài ngắn được coi là nhỏ hơn

Ví dụ:

‘Ho va Ten’ = ‘Ho va Ten’ ‘Ho va’ < ‘Ho va Ten’ ‘abcdeg’ < abg’

II. Lập trình với xâu ký tự

3.

Đọc xâu

Sử dụng các thủ tục

Read(st)

Readln(st)

để đọc các xâu ký tự với độ dài thực là số ký tự gõ vào cho đến khi người dùng gõ phím

Enter

Nếu ta gõ Enter luôn mà không gõ ký tự nào sẽ được một xâu rỗng: st = ‘’

4.

Viết xâu ra màn hình

• Sử dụng các thủ tục

Length( st ) Write(st)

5.

Các hàm và thủ tục chuẩn xử lý xâu ký tự Writeln(st)

Cho độ dài thực của xâu st Ví dụ Với st = ‘Ho va Ten’ Length(st) cho giá trị bằng 9 •

Delete( st, m, n )

Xoá đi n ký tự kể từ vị trí thứ m trong xâu st . Nếu n+m>length(st) thì chỉ những ký tự nằm trong xâu bị xoá Ví dụ: Với st = ‘1234567’. Delete(st. 3. 2) sẽ làm cho st trở thành ‘12567’

II. Lập trình với xâu ký tự

Insert ( st1, st, n )

Chèn xâu ký tự xt1 vào xâu st tại vị trí thứ n Ví dụ: Với st = ‘Ho va Ten’ st1 = ’12’ Insert(st1, st, 3) sẽ làm cho st trở thành ‘Ho12va Ten’ •

Str( Value, st)

Biến đổi Value (số nguyên hay số thực) thành dãy ký tự biểu diễn số đó, Cách biểi diến được quy định bởi kiểu cách của Value.

Ví dụ: Với I = 512 Str(I:5, st) sẽ cho st = ‘ 512’ (5 ký tự) •

Val(st, Var1, Code)

Biến đổi xâu ký tự st (biểu diễn 1 số nguyên hay số thực thành một số nguyên (hay số thực) và để kết quả trong Var1. Code là một số nguyên dùng để phát hiện lỗi. Nếu biến đổi thành công, Code = 0. Nếu có lỗi, Code sẽ chứa giá trị bằng vị trí của ký tự gây lỗi trong xâu st.

Ví dụ: với st = ‘512.25’ Val(st, X1, KQ) sẽ cho kết quả là X1 = 512.25 và KQ = 0

II. Lập trình với xâu ký tự

Copy( st, m, n)

Trả về n ký tự trong xâu st kể từ vị trí thứ m Ví dụ: Với st=‘1234567890’ Copy ( st, 6, 3) sẽ cho giá trị ‘678’ •

Concat ( st1, st2, ..., stn )

Nối tất cả các xâu st1, st2, ..., stn thành một xâu theo thứ tự được viết. Nếu tổng chiều dài của các xâu thành viên > 255 thì máy tính báo lỗi Ví dụ: Với st1 = ‘Ho va Ten’ st2 = ‘1234’ Concat ( st1, ‘ la ’, st2 ) cho giá trị “Ho va Ten la 1234’ •

Post(st1, st)

Cho vị trí đầu tiên của xâu st1 trong xâu st Ví dụ: st = ‘1234562345’ Post(‘3’, st) sẽ cho giá trị bằng 3 Post(‘A’, st) sẽ cho giá trị bằng 0 (vì không thấy)

III. Ví dụ lập trình với xâu ký tự

Lập chương trình đếm số từ trong một xâu ký tự nhập vào từ bàn phím. Có bao nhiêu từ bắt đầu bằng chữ “A”

.........................

Read(st); Dem := 0; i := 1; Repeat

(* Bỏ qua các dấu cách ở đầu xâu *)

While ((st[I] = ‘ ‘) AND( i < Length(st)) do i:= i + 1; if ( i <= Length(st)) then Dem := Dem + 1;

(* Nhảy qua các ký tự trong từ *)

(*

Tăng biến đếm

While ( ( st[ I ] <> ‘ ‘ ) AND ( i < Length( st ) ) do i:= i + 1; *) Until ( i > Length(st)); So_Tu := Dem; ...........................

(Học viên tự sửa chương trình để đếm số từ bắt đầu bằng chữ cái A)

III. Ví dụ lập trình với xâu ký tự

Lập chương trình đọc vào một số nguyên. Nếu dữ liệu không hợp lệ thì yêu cầu người dùng nhập lại

Var ch : Char; so: Integer; Begin clrscr; So := 0; Repeat ch := Readkey; Write(ch); if (ch >= '0') AND (ch <= '9') then So := So *10 + ORD(ch) - ORD('0') else if (ORD(ch)<>13) then Begin clrscr; Writeln('Ban da go mot ky tu khong hop le. Hay nhap lai'); so := 0; End; Until (ORD(ch) = 13); Writeln('So nguyen ban da nhap la ', so); End.

III. Ví dụ lập trình với xâu ký tự

Viết chương trình đọc một xâu ký tự từ bàn phím và chỉ ra xem nó có phải là xâu đối xứng không.

Program test_st; uses crt; Var st:String[100]; l, h, i: Integer; BEGIN Write('st = '); readln(st); l := Length(st); h := l DIV 2; i := 1; While (i<=h) and (st[i]=st[l-i+1]) do i := i+1; if i <= h then Writeln(st, ' khong doi xung') else Writeln(st, ' doi xung');

END.

readln;

III. Ví dụ lập trình với xâu ký tự

Đọc vào 1 xâu ký tự, In ra tất cả các xâu con có độ dài lớn hơn 1

program substring1;

Var st, Tu: String; i, j, n: Integer; BEGIN write('st='); readln(st); n:=length(st); for i:=1 to n do for j:=n-i+1 downto 2 do begin tu:=copy(st, i, j); writeln(tu); end; END.

readln;

III. Ví dụ lập trình với xâu ký tự

Đọc vào 1 xâu, đổi chữ hoa thành chữ thường và ngược lại, các ký tự khác giữ nguyên.

A:65 B:66 ...

Z:90 a:97 b:98 .... z:122 a cách A 32 ký tự b cách B 32 ký tự

program RevertCase;

Var st: String; i,n: integer; ch: char; BEGIN write('st='); readln(st); n:=length(st); for i:=1 to n do begin ch:=st[i]; case ch of 'A'..'Z': write(chr(ord(ch)+ord('a')-ord('A'))); 'a'..'z': write(chr(ord(ch)-ord('a')+ord('A'))); else write(ch); end; end; readln; END.

III. Ví dụ lập trình với xâu ký tự

Đọc vào 1 xâu ký tự, đếm số lần xuất hiện của một từ cho trước trong xâu

Program CountWords

;

Var st, tu: String; i,dem, vt: integer; BEGIN write('st='); readln(st); write('tu='); readln(tu); st:=' '+ st + ' '; tu:=' '+ tu + ' '; dem:=0; vt:= pos(tu,st); while vt>0 do begin dem:=dem+1; delete(st, vt, length(tu)-1); writeln(st); vt:=pos(tu,st); end; writeln('so lan xuat hien la: ', dem, ' lan'); readln; END.

III. Ví dụ lập trình với xâu ký tự

Viết chương trình chuyển cụm dấu cách thành một dấu cách trong xâu ký tự đọc vào.

Program convert;

Uses crt; Var BEGIN st: String[100]; i: Integer; Write('Xau ky tu ban dau: '); Readln(st); i := pos(' ', st); While i > 0 do Begin Delete(st, i, 1); i := pos(' ', st); End; Write('Xau ket qua: ', st); Readln; END.