Phép so sánh 2 xâu trong pascal

-xâu ký tự đượ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.

Cách khai báo:

Var ten_xau: STRING[độ dài của xâu];

hoặc Var ten_xau:string;

ví dụ:

var hoten:string[20];

var hoten:string;

Xâu ký tự trong bộ nhớ nó chiếm số byte bằng số ký tự cực đại được khai báo cộng với byte đầu tiên chứa số ký tự hiện có của xâu. Độ dài tối đa của xâu ký tự là 255.

- Cách nhập/xuất: Cách nhập hay xuất kiểu STRING cũng tương tự như các kiểu dữ liệu khác, ta sử dụng các thủ tục READ, READLN, hoặc WRITE, WRITELN

Ví dụ:

Readln(hoten);

Writeln(hoten);

-Giá trị gán cho biến kiểu xâu phải được để trong cặp nháy đơn

Ví dụ

a:=’THCS NQ’;

-Gán giá trị các biến kiểu xâu cho nhau tương tự biến kiểu khác

Ví dụ:

a1:=’Ngo’; a2:=’Quyen’; a1:=a2; ==> a1 sẽ là Quyen

- Truy cập từng phần tử của xâu ký tự: truy cập tương tự mảng 1 chiều: thông qua tên biến kiểu STRING và chỉ số của nó

Ví dụ:

a:= 'Truong THCS Ngo Quyen';

write(a[6]);

-> Kết quả: cho ra chữ g.

write(a[8]);

-> Kết quả: cho ra chữ T.

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

1/ Phép cộng xâu:

Ví dụ:

a1:=’Ngo’; a2:=’Quyen’; a=a1 + a2;

-> kết quả a=NgoQuyen

2/ Phép so sánh:

Hai xâu ký tự có thể so sánh với nhau bằng các phép so sánh =, >, <…

Nguyên tắc so sánh thực hiện như sau, chúng sẽ đem từng ký tự tương ứng với nhau để so sánh, xâu nào có ký tự có số thứ tự trong bảng mã ASCII lớn hơn thì xâu đó lớn hơn (kí tự a sẽ nhỏ hơn kí tự b , a sẽ lớn hơn A)

Hai xâu ký tự được gọi là bằng nhau khi chúng hoàn toàn giống nhau (có độ dài như nhau).

Ví dụ: ‘abc’ = ‘abc’;

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

  1. Hàm length(s): cho độ dài thực của xâu ký tự s. Tính tất cả các kí tự, kể cả các kí tự ở đầu, giữa xâu s

ví dụ: s:=’Ngo Quyen’ thì LENGTH(s) cho bằng 9.

b/ Thủ tục DELETE(s,i, n): xóa n ký tự trong xâu s kể từ vị trí i

Ví dụ: s= ‘nam hoc moi’

Delete(s,5,4) lúc đó st cho ra là ‘nam moi’

c/ Thủ tục INSERT(s1, s, i): Thủ tục cho kết quả bằng cách chèn xâu s1 vào xâu s tại vị trí i, những ký tự đứng sau i sẽ được dời về phía sau của xâu ký tự s1.

Ví dụ: s1:=’abc’;

s:=’xyzmn’;

INSERT(s1,s,2) lúc đó s=’xabcyzmn’;

d/ Thủ tục STR(value, s): 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ự và gán cho biến t.

Ví dụ: x là một số nguyên có giá trị: x:=68;

STR(x,s) sẽ cho kết quả xâu st là: s=’68’;

e/ Thủ tục VAL(st, value,code) đối một xâu ký tự st sang dạng số và gán cho biến value, nếu biến đối thành công thì code sẽ nhận giá trị bằng 0. ngược lại thì cho giá trị khác không

Ví dụ 1: Giả sử biến Hoten lưu trữ hằng xâu 'Nguyen Le Huyen' thì Hoten[6] cho ta kí tự thứ 6 của Hoten

Dưới đây trình bày cách khai báo kiểu dữ liệu xâu, các thao tác xử lí xâu và một số ví dụ sử dụng kiểu xâu trong Pascal.

1. Khai báo

var < tên biến xâu >: string[độ dài tối đa của xâu];

Trong đó:

- Tên biến xâu: do người lập trình tự đặt.

- var, string: từ khóa.

- độ dài tối đa qui định số kí tự tối đa xâu có, nêu không ghi thì ngầm định là 255 kí tự.

Ví dụ 2:

- var Hoten: string[26];

- Trong mô tả xâu có thể bỏ qua phần khai báo độ dài, chẳng hạn: var Chugiai: string;

- Khi đó độ dài lớn nhất của xâu sẽ nhận giá trị ngầm định là 255.

2. Các thao tác trên xâu

a. Phép ghép xâu

- Phép ghép xâu (kí hiệu là cộng).

- Được sử dụng để ghép nhiều xâu thành một.

- Có thể thực hiện phép ghép xâu đối với các hằng và biến xâu.

Ví dụ 3: 'Ha'+ ' Noi' +' - '+'Viet Nam' \(\rightarrow\) Cho xâu kết quả là 'Ha Noi - Viet Nam'.

b. Phép so sánh xâu

- Các phép so sánh bằng (=), khác (<>), nhỏ hơn (<), lớn hơn (>), nhỏ hơn hoặc bằng (<=), lớn hơn hoặc bằng (>=) có thứ tự ưu tiên thực hiện thấp hơn phép ghép xâu và thực hiện việc so sánh hai xâu theo các quy tắc sau:

+ Xâu A là lớn hơn xâu B nếu như kí tự đầu tiên khác nhau giữa chúng kể từ trái sang trong xâu A có mã ASCII lớn hơn.

+ Nếu A và B là các xâu có độ dài khác nhau và A là đoạn đầu của B thì A là nhỏ hơn B.

Ví dụ 4: 'May tinh' < 'May tinh cua toi'.

- Hai xâu được coi là bằng nhau nếu như chúng giống nhau hoàn toàn. Ví dụ 5: 'TIN HOC' = 'TIN HOC'.

c. Thủ tục xóa n kí tự

- Thực hiện việc xoá n kí tự của xâu st bắt đầu từ vị trí vt.

- Cú pháp: delete(st,vt,n)

Trong đó:

st: xâu.

vt: vị trí bắt đầu xóa.

n: số kí tự xóa.

Ví dụ 6:

.png)

Bảng 1. Ví dụ về thủ tục xóa n kí tự

d. Thủ tục chèn xâu S1 vào xâu S2

- Thực hiện chèn xâu s1 vào xâu s2, bắt đầu ở vị trí vt.

- Cú pháp: Insert(s1,s2,vt)

Trong đó:

s1, s2: xâu.

vt: vị trí bắt đầu chèn xâu s1.

Ví dụ 7:

.png)

Bảng 2. Ví dụ thủ tục chèn xâu S1 vào xâu S2

e. Hàm tạo xâu

- Tạo xâu gồm N kí tự liên tiếp bắt đầu từ vị trí vt của xâu S.

- Cú pháp: copy(s,vt,n)

Trong đó:

s: xâu.

vt: vị trí bắt đầu lấy trong xâu s.

n: số kí từ sé lấy.

Ví dụ 8:

.png)

Bảng 3. Ví dụ hàm tạo xâu

f. Hàm tính độ dài xâu

- Cho giá trị là độ dài xâu s.

- Cú pháp: length(s)

- Ví dụ 9:

.png)

Bảng 4. Ví dụ hàm tính độ dài xâu

g. Hàm cho biết vị trí xuất hiện đầu tiên của xâu s1 trong s2

- Cho vị trí xuất hiện đầu tiên của xâu s1 trong xâu s2.

- Cú pháp: pos(s1,s2)

- Ví dụ 10:

.png)

Bảng 5. Ví dụ hàm cho biết vị trí xuất hiện đầu tiền của xâu s1 trong xâu s2

h. Hàm cho chữ cái in hoa

  • Cho chữ cái viết hoa ứng với chữ cái trong ch.
  • Cú pháp: upcase(ch)
  • Ví dụ 11: upcase(a) ---> 'A'

upcase(B) ---> 'B'

3. Bài tập:

3.1. Bài tập 1

Chương trình dưới đây nhập họ tên của hai người vào hai biến xâu và đưa ra màn hình xâu dài hơn, nếu bằng nhau thì đưa ra xâu nhập sau.

Gợi ý làm bài:

Đoạn chương trình cài đặt:

var a,b:string; begin write('Nhap ho ten thu nhat: '); readln(a); write('Nhap ho ten thu hai: '); readln(b); if length(a)>length(b) then write(a) else write(b); readln end.

3.2. Bài tập 2

Chương trình dưới đây nhập hai xâu từ bàn phím và kiểm tra kí tự đầu tiên của xâu thứ nhất có trùng với kí tự cuối cùng của xâu thứ hai không.

Gợi ý làm bài:

Đoạn chương trình cài đặt:

var x: byte; a,b: string; begin write('Nhap xau thu nhat: '); readln(a);

write('Nhap xau thu hai: '); readln(b);

x:=length(b);

{xac dinh do dai xau b de biet vi tri cua ki tu cuoi cung} if a[1]=b[x] then write('Trung nhau')

else write('Khac nhau'); readln end.

3.3. Bài tập 3

Chương trình sau nhập một xâu vào từ bàn phím và đưa ra màn hình xâu đó nhưng được viết theo thứ tự ngược lại.

Gợi ý làm bài:

Đoạn chương trình cài đặt:

var i,k: byte; a: string; begin write('Nhap xau:'); readln(a); k:= length(a); {xac dinh do dai xau} for i:= k downto 1 do write(a[i]);

readln end.

3.4. Bài tập 4

Chương trình sau nhập một xâu vào từ bàn phím và đưa ra màn hình xâu thu được từ nó bởi việc loại bỏ các dấu cách.

Gợi ý làm bài:

Đoạn chương trình cài đặt:

var i,k: byte;

a, b: string;

begin

write('Nhap xau:');

readln(a);

k:= length(a);

b:= ' '; (* Khoi tao xau rong *)

for i:= 1 to k do

if a[i]<> ' ' then b:=b+a[i];

writeln('Ket qua: ',b);

readln

end.

3.5. Bài tập 5

Chương trình sau nhập vào từ bàn phím xâu kí tự s1, tạo xâu s2 gồm tất cả các chữ số có trong s1 (giữ nguyên thứ tự xuất hiện của chúng) và đưa kết quả ra màn hình.