Tài liệu bồi dưỡng học sinh giỏi môn Tin học Lớp 8 - Chuyên đề: Dữ liệu kí tự, xâu kí tự

* Các thao tác trên xâu kí tự:

(1) Phép cộng xâu

Ví dụ: st1:=’Nguyen ’; st2:=’Thanh’; st:= st1+st2;

KQ: ‘Nguyen Thanh’

(2) Phép so sánh: =, >, <, .

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

(a) Hàm length(st); {Trả về độ dài của xâu st}.

(b) Thủ tục DELETE(st, pos, num); {Xóa num kí tự trong xâu st kể từ vị trí pos}.

Ví dụ: st = ‘Nguyen Thanh’

 Delete(st, 7,6) lúc đó st cho ra Nguyen

(c) Hàm COPY(st, pos, num); {Sao chép xâu st num kí tự tại vị trí pos}.

Ví dụ: st = ‘Nguyen Thanh Hiep’

Copy(st, 8, 5) = ‘Thanh’

 

doc4 trang | Chia sẻ: hatranv1 | Ngày: 16/12/2021 | Lượt xem: 152 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Tài liệu bồi dưỡng học sinh giỏi môn Tin học Lớp 8 - Chuyên đề: Dữ liệu kí tự, xâu kí tự, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CHUYÊN ĐỀ VỀ DỮ LIỆU KÍ TỰ, XẤU KÍ TỰ
4. Kiểu dữ liệu ký tự 
- Từ khoá: CHAR. 
- Kích thước: 1 byte. 
- Để biểu diễn một ký tự, ta có thể sử dụng một trong số các cách sau đây: 
+ Đặt ký tự trong cặp dấu nháy đơn. Ví dụ 'A', '0'. 
+ Dùng hàm CHR(n) (trong đó n là mã ASCII của ký tự cần biểu diễn). Ví dụ CHR(65) biễu diễn ký tự 'A'. 
+ Dùng ký hiệu #n (trong đó n là mã ASCII của ký tự cần biểu diễn). Ví dụ #65. 
* Các phép toán: =, >, >=, . 
* Các hàm trên kiểu ký tự:
- UPCASE(ch): Trả về ký tự in hoa tương ứng với ký tự ch. Ví dụ: UPCASE('a') = 'A'. 
- ORD(ch): Trả về số thứ tự trong bảng mã ASCII của ký tự ch. Ví dụ ORD('A')=65. 
- CHR(n): Trả về ký tự tương ứng trong bảng mã ASCII có số thứ tự là n. Ví dụ: CHR(65)='A'. 
- PRED(ch): cho ký tự đứng trước ký tự ch. Ví dụ: PRED('B')='A'. 
- SUCC(ch): cho ký tự đứng sau ký tự ch. Ví dụ: SUCC('A')='B'.
5. Kiểu dữ liệu xâu ký tự
Để xử lý các chuỗi văn bản, Pascal đưa ra một kiểu dữ liệu mới gọi là xâu ký tự và được định nghĩa bằng từ khóa STRING. Xâu ký tự là dữ liệu bao gồm một dãy các ký tự trong bảng mã ASSCII.
* Khai báo:
Var : STRING[độ dài của xâu];
Var : STRING; {Độ dài tối đa của xâu ký tự là 255.}
Var : ANSISTRING; {Đối với Free Pascal độ dài không hạn chế, phụ thuộc vào bộ nhớ}
Ví dụ: var st[30]; {khai báo xâu kí tự st có độ dài cực đại là 30 kí tự} 
* Nhập xâu: Read(st);
* In xâu: write(st);
* Truy xuất vào từng phần tử của xâu:
Tên
Số kí tự lưu được
Dung lượng theo bytes
String
255
?
Shortstring
Tương tự String (255)
?
Ansistring
Tùy thuộc vào bộ nhớ (càng nhiều bộ nhớ thì lưu được càng nhiều)
?
Ta có thể truy cập vào từng kí tự của một xâu kí tự với tên biến và chỉ số đặt trong ngoặc vuông như khi truy cập vào 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.
Ví dụ: For i:=1 to length(st) do if (st[i]= ‘ ‘) and (st[i+i] ‘ ‘) then dem:=dem+1;
* Các thao tác trên xâu kí tự:
(1) Phép cộng xâu
Ví dụ: st1:=’Nguyen ’; st2:=’Thanh’; st:= st1+st2;
KQ: ‘Nguyen Thanh’
(2) Phép so sánh: =, >, <, ...
(3) Các thủ tục và hàm chuẩn xử lí xâu kí tự
(a) Hàm length(st); {Trả về độ dài của xâu st}.
(b) Thủ tục DELETE(st, pos, num); {Xóa num kí tự trong xâu st kể từ vị trí pos}.
Ví dụ: st = ‘Nguyen Thanh’
 Delete(st, 7,6) lúc đó st cho ra Nguyen
(c) Hàm COPY(st, pos, num); {Sao chép xâu st num kí tự tại vị trí pos}.
Ví dụ: st = ‘Nguyen Thanh Hiep’
Copy(st, 8, 5) = ‘Thanh’
(d) Thủ tục INSERT(obj, st, pos); {Thủ tục cho kết quả bằng cách chèn xâu kí tự có tên obj vào xâu st tại vị trí pos, những kí tự đứng sau pos sẽ được dời về phía sau của xâu kí tự obj}.
Ví dụ: st = ’Nguyen Hiep’; obj = ‘Thanh’;
Insert(obj, st, 8); lúc đó st = ‘Nguyen Thanh Hiep’;
(e) Thủ tục SRT(value, st); {Thủ tục này thực hiện việc chuyển đổi giá trị kiểu số (value) sang dạng xâu kí tự gán vào cho biến st.
Ví dụ: n là một số nguyên có giá trị n:= 10;
SRT(n:4, st); sẽ cho kết quả xâu st = ‘10’;
(f) Thủ tục VAL(st, value, code); {Đổi một xâu kí tự sang dạng số và gán cho biến value, nếu biến đổi thành công thì code nhận giá trị bằng 0. Ngược lại cho giá trị khác không.
Ví dụ: Val(‘234’, value, code); Lúc này code nhận giá trị bằng 0 và valure = 234;
 (g) Hàm CONCAT(st1, st2,..., stn); {Hàm cho ra một xâu mới bằng cách nôi đuôi các xâu st1, st2, ..., stn lại với nhau}.
Ví dụ: Concat(‘Nguyen ’, ‘Thanh ’, ‘Hiep’) = ‘Nguyen Thanh Hiep’;
(g) Hàm POS(st1, st2); {Hàm cho ta vị trí tìm thấy đầu tiên của xâu st1 trong xâu st2. Nếu không tìm thấy xâu st1 trong xâu st2 hàm trả về giá trị bằng 0}.
Ví dụ: Pos(‘Thanh’, ‘Nguyen Thanh Hiep’) = 8;
BÀI TẬP VỀ XẤU KÍ TỰ
46. Viết chương trình nhập vào một xâu ký tự từ bàn phím. Thông báo lên màn hình các chữ cái có trong xâu và số lượng của chúng (Không phân biệt chữ hoa hay chữ thường).
Thuật toán:
- Dùng một mảng dem với chỉ số là các chữ cái để lưu trữ số lượng của các chữ cái trong xâu.
	- Duyệt qua tất cả các ký tự của xâu St: Nếu ký tự đó là chữ cái thì tăng ô biến mảng dem[St[i]] lên 1 đơn vị.
47. Viết chương trình liệt kê các từ của một xâu ký tự được nhập vào từ bàn phím, mỗi từ phải được viết trên một dòng.
48. Viết chương trình nhập vào một xâu ký tự từ bàn phím. Tìm xâu đảo ngược của xâu đó rồi in kết quả ra màn hình. 
Thuật toán:
	- For i:= length(st) downto 1 dst = dst + st[i];
Cách 2, đệ qui:
- Nếu xâu St có 1 ký tự thì xâu đảo = St.
	- Ngược lại: Xâu đảo = Ký tự cuối + Đệ qui (Phần còn lại của xâu St).
49. Viết chương trình xóa các ký tự chữ số trong một xâu ký tự được nhập vào từ bàn phím.
50.Viết chương trình nhập vào một xâu ký tự từ bàn phím. Tìm và in ra màn hình một từ có độ dài lớn nhất trong xâu.
Thuật toán: Tách từng từ để so sánh.
51. Viết chương trình nhập một xâu ký tự St từ bàn phím và một ký tự ch. In ra màn hình xâu St sau khi xóa hết các ký tự ch trong xâu đó.
Thuật toán:	While POS(ch, st)0 Do Delete(st, POS(ch, st), 1);

File đính kèm:

  • doctai_lieu_boi_duong_hoc_sinh_gioi_mon_tin_hoc_lop_8_chuyen_de.doc