- Ebook Giải thuật và lập trình Lê Minh Hoàng
- Các thuật toán sắp xếp trong Pascal

Bài 5: Xâu ký tự (String) trong Pascal



Xâu là gì? Để 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.

Cách khai báo:

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

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 đọc hay viế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, hoặc WRITE.
Ví dụ:
Readln(st);
Writeln(st);

- Truy cập từng phần tử của xâu ký tự: 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ụ:
St := 'Le Thanh Lam';
write(st[4]);
-> 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ụ:
st1:=’Le’; st2:=’Thanh’; St=st1 + st2; 
-> KQ: ‘Le Thanh’

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.
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ụ: ‘FILENAME’ = ’FILENAME ‘

3/ Các thủ tục và hàm chuẩn xử lý xâu ký tự
a. Hàm length(st): cho độ dài thực của xâu ký tự
ví dụ: st:=’le thanh’ thì LENGTH(st) cho bằng 8.

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= ‘FILENAME’
Delete(st,5,4) lúc đó st cho ra là ‘FILE’

c/ 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 là Obj vàoxâ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ụ: obj:= ‘Thanh ‘
st:=’Le Lam’;
INSERT(obj,st,4) lúc đó st=’Le Thanh Lam’;

d/ Thủ tục STR(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ự và gán cho biến st.
Ví dụ: n là một só nguyên có giá trị: n:=150;
STR(n:5,st) sẽ cho kết quả xâu st là: st=’ 150’;

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ụ: VAL(‘123’,value,code) lúc này code sẽ nhận giá trị bằng 0 và value=123

f/ Hàm COPY(st, pos, num): sao chép trong xâu st, num ký tự tại vị trí pos,
Ví dụ: st=’Le Thanh Lam’
COPY(st,4,5) = ‘Thanh’;

g/ Hàm CONCAT(s1,s2,…,sn): hàm cho ra 1 xâu mới bằng cách nối đuôi các xâu s1,s2,…,sn lại với nhau.
Ví dụ: CONCAT(‘Le ’,’Thanh ‘, ‘Lam’) = ‘Le Thanh Lam’;

h/ Hàm POS(st1,st2): hàm cho tavị trí tìm thấy đầu tiên của xâu s1 trong xâu s2.
Ví dụ: POS(‘Lam’,‘Le Thanh Lam’) = 10;

Sưu tầm và biên tập



chiconghl nói...

nhờ giải thích về ý nghĩa của đoạn lệnh
for i:=1 to length(s) do
A[s[i]]:=A[s[i]]+1;


16:06 4 tháng 8, 2012
TÌNH Bạn nói...

câu này mình thấy wen wen !!


09:28 11 tháng 11, 2012
Nặc danh nói...

mình không hiểu lắm câu lệnh val('123',value,code)


13:29 23 tháng 11, 2012
thanh vũ nói...

du ma djt loz me kho vaj lon du ma.


07:05 7 tháng 12, 2012
Nặc danh nói...

Xau ki tu voi minh la mot bai kho


21:02 15 tháng 12, 2012
Thu Nguyen Vo Anh nói...

cach dao chu phai lm sao day?giup minh vs!!!!!!!!!


09:18 20 tháng 1, 2013
Nặc danh nói...

Ban thu downto chua? Minh nghi vay thoi. Chua chac lam ban a!


21:48 31 tháng 1, 2013
Nặc danh nói...

Minh vua thu xong. Downto duoc ma! Thanks nhieu.


21:53 31 tháng 1, 2013
Nặc danh nói...

tôi kô hiểu lắm về pascal mọi người giúp tôi với


15:43 20 tháng 3, 2013
Nặc danh nói...

ai giỏi về pascal thì gọi cho tôi nha
01629073134
xin cảm ơn mọi người trước


15:44 20 tháng 3, 2013
Trần Văn Tiệp nói...

nếu mảng là xâu kí tự thì a[0] chứa cái gì trong pascal


09:18 26 tháng 3, 2013
Dai Hoang nói...

ai ranh? k??? lam gjup may bai tap nay voi... dc thj pm , toi up len cho lm jup/ caj nha... tks trk.>>>


13:56 22 tháng 5, 2013
Nặc danh nói...

lam sao de lay chu dau cua mot xau roi đem dò voi mot mit xau khac???Ban nao biet thi giup mih vs!!!!


21:40 16 tháng 7, 2013
Nặc danh nói...

mk cg phai cong nhan la xau kho that! @_@


14:33 10 tháng 2, 2014
Nặc danh nói...

@@


12:59 19 tháng 2, 2014
Nặc danh nói...

mình cũng khá hiểu bài này nhưng không biết admin đã bỏ blog này chưa


15:22 10 tháng 4, 2014
Bui Tin nói...

nhập vào một chuỗi sau đó xuất ra các từ dài nhất trong chuỗi ?
Dữ liệu vào : Một Chuỗi
Dữ liệu ra :các từ dài nhất trong chuỗi


16:19 9 tháng 3, 2015
thanhthuy bui nói...

viết chương trình nhập 2 xâu S1,S2 cho biết độ dài của từ dài nhất trong xâu S1. giúp mình với


23:02 19 tháng 3, 2015
http://kienthuc24h.com/ nói...

haiz. vào trang mình mà coi
http://kienthuc24h.com/


00:25 27 tháng 3, 2015
Unknown nói...

pos xài sao ạ


10:30 11 tháng 10, 2015
Thư My nói...

có ai giúp mk bài này ko??
VCT nhập vào 1 số nguyên dương n, in ra cách viết nhị phân của nó.
please!! please!! giúp mk với..


18:19 4 tháng 11, 2015
Nhung Thuy nói...

ai rảnh làm hộ mình bài này với
nhập vào một chuỗi st, đếm xem trong st :
Có bao nhiêu chữ cái A->Z, a->z;
Có bao nhiêu chữ số : 0. .9
Có bao nhiêu ký tự trắng
Có bao nhiêu ký tự khác
Trong số các loại ký tự trên loại nào là nhiều nhất?


21:09 17 tháng 12, 2015
Nặc danh nói...

Không biết có ai trả lời bạn Nhung Thuy chưa...
Mình có làm một bài theo yêu cầu đếm số ký tự của bạn. có thể không hay nhưng nếu cần bạn có thể tham khảo.

Program Dem_Ky_Tu;
uses crt;
var s,Len:string;
i,H,T,N,E:byte;{Hoa, Thuong, Normal, Else}
MaxL:byte; {Nhieu ky tu nhat}

begin
clrscr;
write('Nhap xau can dem: ');
readln(s);
H:=0;
T:=0;
N:=0;
E:=0;
for i:=1 to length(s) do
begin
if s[i] in ['A'..'Z'] then
H:=H+1
else if s[i] in ['a'..'z'] then
T:=T+1
else if s[i] in ['0'..'9'] then
N:=N+1
else E:=E+1;
end;
Len:='';
MaxL:=H;
Len:='In Hoa';
if T>MaxL then
begin
MaxL:=T;
Len:='Thuong';
end;
if N>MaxL then
begin
MaxL:=N;
Len:='So';
end;
if E>MaxL then
begin
MaxL:=E;
Len:='Khac';
end;

Writeln('Trong chuoi co [',H,'] ky tu in hoa.');
Writeln('Trong chuoi co [',T,'] ky tu thuong.');
Writeln('Trong chuoi co [',N,'] ky tu so.');
Writeln('Trong chuoi co [',E,'] ky tu khac.');
write('Ky tu ',Len,' co nhieu ky tu nhat.');

end.


17:05 7 tháng 1, 2016
Nặc danh nói...

Giúp mìh bài này với
Viết chương trình nhập vào xâu s có độ dài không quá 150 kí tự.Hãy in ra có bao nhiêu chữ số trong xâu s và in ra các kí tự là chữ viết hoa


21:12 3 tháng 3, 2016
Anh Tới nói...

lạy mấy thánh


15:57 23 tháng 3, 2016
Nặc danh nói...

Thật đơn giản


08:57 16 tháng 5, 2016
Nặc danh nói...

Chuyển xâu '123' sang số 123


08:48 22 tháng 7, 2016
Unknown nói...

bài viết lâu phết r vẫn có ng rep -_-


23:20 3 tháng 9, 2016
Nặc danh nói...

tìm từ dài nhất trong xâu (từ là một dãy kí tự liên tiếp ko chứa dấu cách)
có ai rãnh ko? chỉ e bài nay với


15:59 17 tháng 9, 2016
Hưng Nguyễn nói...

co cach nao chuyen so thuc sang xau ki tu duoc khong may ban
trong turbo nha


15:24 30 tháng 9, 2016
long phan thanh nói...

Ai giúp mình làm bài mã hoá 1 đoạn vb với số K nhập từ màn hình


13:35 20 tháng 10, 2016
long phan thanh nói...

Ai giúp mình làm bài mã hoá 1 đoạn vb với số K nhập từ màn hình


13:36 20 tháng 10, 2016
Unknown nói...

ai giúp mình giải bài toán cho 1 xâu, và thời điểm t, cho bảng điện tử hiện theo xau.
vd: s='tuyensinh10'
t=12
kq 'yensinh10t'


10:30 28 tháng 10, 2016
Nặc danh nói...

bạn có thể nói rõ hơn ko,mình k hiểu lắm


11:35 30 tháng 10, 2016
Gai Xinh nói...

1.Nhập vào một xâu ký tự và ghi vào file vanban.txt
2.Đọc file vanban.txt, mã hóa mỗi ký tự thành 1 xâu dài 8 bit. Ghi xâu đã được mã hóa vào file code.txt
3.Đọc file code.txt và thêm vào cuối mỗi ký tự đã được mã hóa một bit sao cho số bit 1 trong mỗi ký tự được mã hóa là một số lẻ. Với mỗi khối gồm 8 ký tự thêm vào một hàng gồm 8 bit, mỗi một bít được tính sao cho tổng số bit 1 trên mỗi cột là một số lẻ. Ghi các khối đã được mã hóa vào file có tên encoded.txt.
4. Đọc các khối từ file encoded.txt và sửa ngẫu nhiên một số bit sau đó ghi vào file có tên error.txt.
5. Đọc file error.txt, sử dụng phương pháp phát hiện lỗi thích hợp để kiểm tra xem các ký tự có bị lỗi hay không?
(Se hau tang) mysupatu@gmail.com


14:12 14 tháng 11, 2016
Bùi Thanh Tùng nói...

xài for i:=1 to length(st) do begin
if st[i] in ['A'..'Z'] then inc(dem1);
.... tương tự
cái cuối thì xài if (st[i] or ['A'..'Z'] ) or ( (st[i] in ['0'..'9'] ) or (ord(st[i])65) then writeln else inc(dem2);
end;


00:52 25 tháng 11, 2016
Bùi Thanh Tùng nói...

Cần 1 thánh viết giúp em cái code đảo ngược các từ lại ( k phải là đảo kí tự nhé) trong 1 chuỗi, xếp chúng theo tăng dần


00:58 25 tháng 11, 2016
Nặc danh nói...

kha de
for i:=2 to length(st) do
for j:=1 to length(st)-1 do
if st[i]<st[j]then
begin
tg:=st[i];
st[i]:=st[j];
st[j]:=tg;
end;


17:56 2 tháng 12, 2016
Unknown nói...

Ai giúp giải bài này với.............
một xâu chữ cái được gọi là xâu số nếu khi xóa 1 vài kí tự ta thu được một trong các xâu sau: ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE. Cac xâu:ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE được gọi là các chữ số(tương ứng với các số nguyên:1,2,3,4,5,6,7,8,9)
vd
BOUNCE và ANNOUNCE là hai xaau số vì hai xâu có chứa từ ONE
ENCODE không phải là xâu số vì dù có chứa o,n,e nhưng vị trí có kí tự o,n,e trong xâu này không theo thứ tự
yêu cầu:
viết chương trình nhập vào 1 xâu. kiểm tra xâu đó có pải xâu số k . Nếu là xâu sô thì in ra màn hình số nguyên tương ứng với từ sô chứa trong xâu này. Nếu xâu đc nhập k pải là xâu số thì xuất ra mang hình "KHONG'.
VD
BOUNCE thì in ra 1
ENCODE thì in ra KHONG


20:50 8 tháng 12, 2016
Nguyễn Hoàng Vũ nói...

còn ai pascal kb fb học vui đi :)


20:48 6 tháng 2, 2017
Nguyễn Hoàng Vũ nói...

Ho lam.
Mói học chập chững nên cũng không bjk làm thế nào. xem thử đúng k nha.
program Xau_so;
uses crt;
var F:string;
so: array[1..9] of string = ('ONE','TWO','THREE','FOUR','FIVE','SIX','SEVEN','EIGHT','NINE');
t,i,k:integer;
Function dem(S:string):integer;
begin
for t:=1 to 9 do begin k:=1;
for i:=1 to length(S) do begin
if S[i]= So[t][k] then k:=k+1;
if k>length(so[t]) then dem:=t; end; end;
if dem in [1..9] then else dem:=0; end;
begin
write('Nhap vao 1 xau : ');Readln(F);
{ for t:=1 to 9 do
for i:=1 to length(S) do begin
if S[i]= So[t].[k] then k:=k+1;
if k>length(so[t]) then dem :=t; end;}
t:=dem(F);
if t <> 0 then writeln('Xau vua nhap la so : ',t) else
writeln('Xau vua nhap la : KHONG');
readln;
end.


21:12 6 tháng 2, 2017
Nguyen tuan nói...

Hay dùng khi đếm số lượng mỗi loại kí tự trong xâu s. Trước đó phải khởi tạo a[...]=0


03:58 14 tháng 2, 2017
Unknown nói...

ai làm giúp e cái này với St := 'Nguyen Thi Hoa' giờ e muốn xóa luôn cả 2 chữ Nguyen và Hoa để lại chữ thị thì làm thế nào ạ


20:29 17 tháng 2, 2017

Đăng nhận xét

Thành viên Blog

Tổng số lượt xem trang

Translate

Return to top of page Copyright © 2012 | Theme by Hack Tutors. Cung cấp bởi Blogger.
Các code pascal trong blog được sưu tầm, lựa chọn sao cho tối ưu nhất. Cảm ơn các tác giả đã viết thuật toán.