Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 27

* 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à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ụ: 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;
i/ Hàm Length(st): cho kết quả là một số nguyên chỉ chiều dài của chuỗi st.
ví dụ: lenght('PASCAL') --> 6
j/ Hàm UPCASE(Ký_tự)--> Đổi Ký_tự thành "KÝ_TỰ" in hoa
* Truy xuất từng ký tự trong chuỗi
Có thể kết hợp dùng vòng lặp truy xuất các ký tự trong chuỗi.
Ví dụ: In ra các ký tự của chuỗi st[i] ra màn hình theo từng dòng
st:='PASCAL';
for i:=1 to 6 do writeln(st[i]);

Bài 1: Nhập xâu S1, tạo xâu S2 gồm tất cả các chữ số của xâu S1
Program Xau_chu_so;
Uses crt;
Var i: integer;
S1,S2: string;
Begin
Clrscr;
Write(‘Nhap xau ki tu S1: ‘); Readln(S1);
S2:=#32;
For i:=1 to length(S1) do
If S1[i] in [‘0’..’9’] then S2:=S2+S1[i];
Writeln(‘Xau S2: ‘,S2);
End.
Bài 2: Nhập xâu S1, tạo xâu S2 gồm tất cả các chữ cái của xâu S1
Program Xau_chu_cai;
Uses crt;
Var i: integer;
S1,S2: string;
Begin
Clrscr;
Write(‘Nhap xau ki tu S1: ‘); Readln(S1);
S2:=#32;
For i:=1 to length(S1) do
If S1[i] in [‘A’..’Z’]+[‘a’..’z’] then S2:=S2+S1[i];
Writeln(‘Xau S2: ‘,S2);
End.
Bài 3: Nhập xâu S. Tìm ra có bao nhiêu chữ cái, bào nhiêu chữ số.
Program Dem_chu_cai_so;
Uses crt;
Var I,dem_chu,dem_so: integer;
S: string;
Begin
Clrscr;
Write(‘Nhap xau S: ‘); Readln(S);
Dem_chu:=0; dem_so:=0;
For i:=1 to length(S) do
If S[i] in [‘A’..’Z’]+[‘a’..’z’] then Dem_chu:=dem_chu+1 else
Dem_so:=dem_so+1;
Writeln(‘Trong xau S co tat ca’,dem_chu,’chu cai’);
Writeln(‘Trong xau S co tat ca’,dem_so,’chu so’);
End.
Bài 4: Xóa hết khoảng trắng
Program Xoa_khoang_trang;
Uses crt;
Var i: integer;
S1,S2: string;
Begin
Clrscr;
Write(‘Nhap xau S1: ‘); Readln(S1);
S2:=#32;
For i:=1 to length(S) do
If S1[i]<>#32 then S2:=S2+S1[i];
Writeln(S);
End.
Bài 5: Xóa hết chữ số trong xâu
Program Xoa_chu_so;
Uses crt;
Var i: integer;
S: string;
Begin
Clrscr;
Write(‘Nhap xau S: ‘); Readln(S);
For i:=length(S) downto 1 do
If S[i] in [‘0’..’9’] then
Delete(S,i,1);
Writeln(‘Xau sau khi xoa: ‘,S);
End.
Bài 6: Xóa hết chữ cái có trong xâu
Program Xoa_chu_cai;
Uses crt;
Var i: integer;
S: string;
Begin
Clrscr;
Write(‘Nhap xau S: ‘); Readln(S);
For i:=length(S) downto 1 do
If S[i] in [‘a’..’z’]+[‘A’..’Z’] then
Delete(S,i,1);
Writeln(‘Xau sau khi xoa: ‘,S);
End.
Bài 7: Nhập vào xâu. In ra xâu đảo theo từ
Program Xau_dao_theo_tu;
Uses crt;
Var S: string;
x,y,z: integer;
Begin
Clrscr;
Write(‘Nhap xau S: ‘); Readln(S);
Y:=length(S);
For z:=length(S) downto 1 do
Begin
If ((S[y]=#32) and (y=1)) then
Begin
For x:=y to z do write(S[x]);
Z:=y;
End;
End;
End.
Bài 8: Đếm số lần xuất hiện của các kí tự trong xâu.
Program So_lan_xuat_hien;
Uses crt;
Var S: string;
dem: array[‘A’..’Z’] of integer;
i:integer;
ch:char;
Begin
Write(‘Nhap xâu S: ‘); Readln(S);
For ch:=’A’ to ‘Z’ do
Dem[ch]:=0;
For i:=1 to length(S) do
If upcase(S[i]) in [‘A’..’Z’] then Inc(dem[upcase(S[i])]);
For ch:=’A’ to ‘Z’ do
If dem[ch]<>0 then Writeln(ch,’ ‘,dem[ch]);
End.
Bài 9: In xâu S1 xuất hiện bao nhiêu lần trong xâu S2
Program S1_xuat_hien;
Uses crt;
Var i,dem: integer;
S1,S2: string;
Begin
Clrscr;
Write(‘Nhap xau S2: ‘); Readln(S2);
Write(‘Nhap xau S1: ‘); Readln(S1);
Dem:=0;
For i:=1 to length(S2) do
If S1=copy(S2,i,length(S1)) then Dem:=dem+1;
Writeln(‘Chuoi S1 xuất hien’,dem,’lan trong xau S2’);
End.
Bài 11: Đếm số từ trong xâu
Program So_tu;
Uses crt;
Var i,dem: integer;
S: string;
Begin
Clrscr;
Write(‘Nhap xau S: ‘); Readln(S);
Dem:=0;
S:=S+’ ‘;
For i:=1 to length(S) do
If S[i]=#32 then dem:=dem+1;
Writeln(‘Trong xau co tat ca’,dem,’tu’);
End.
Bài 12: Xóa hết kí tự trùng nhau trong xâu
Program Xoa_ki_tu_trung;
Uses crt;
Var i,j,n: integer;
S: string;
Begin
Clrscr;
Write(‘Nhap xau S: ‘); Readln(S);
N:=length(S);
I:=1;
While i<n do
Begin
J:=i+1;
While j<=n do
Begin
If S[i]=S[j] then
Begin
Delete(S,j,1);
N:=n-1;
End
Else j:=j+1;
End;
I:=i+1;
End;
Writeln(‘Xau S moi: ‘,S);
End.
Bài 13:Nhập xâu St. Xóa một kí tự được nhập từ bàn phím.
Program Xoa_ki_tu;
Uses crt;
Var i: integer
K: char;
St: string;
Begin
Clrscr;
Write(‘Nhap xau St: ‘); Readln(St);
Write(‘Nhap ki tu k: ‘); Readln(k);
For i:=1 to length(S) do
If St[i]=k then delete(S,I,1);
Writeln(‘Xau sau khi xoa: ‘,S);
End.
Bài 14: Nhập xâu S. Nhập kí tự k. Đếm số lần xuất hiện của k
Program Ki_tu_k;
Uses crt;
Var i: integer;
K: char;
S: string;
Begin
Clrscr;
Write(‘Nhap xau S: ‘); Readln(S);
Dem:=0;
For i:=1 to length(S) do
If S[i]=k then dem:=dem+1;
Writeln(‘Ki tu k xuat hien’,dem,’lan’);
End.
Bài 15: Xâu đối xứng
Program Xau_doi_xung;
Uses crt;
Var st:string;
i,j:integer;
Begin
write('Nhap xau: ');Readln(St);
i:=1;
j:=length(st);
while (i<=j) do
begin
if st[i]<>st[j] then
begin
write('NO');
exit;
end;
i:=i+1;
j:=j-1;
end;
write('YES');
readln;
End.
Bài 16: Đếm xem trong xâu có bao nhiêu nguyên âm
Program Nguyen_am;
Uses crt;
Var dem,i: integer;
S: string;
Begin
Clrscr;
Write(‘Nhapxau S: ‘); Readln(S);
Dem:=0;
For i:=1 to length(S) do
If S[i] in [‘A’,’O’,’E’,’U’,’I’,’a’,’o’,’e’,’u’,’i’] then
Dem:=dem+1;
Writeln(‘Trong xau co tat ca: ‘,dem,’ nguyen am’);
End.
Bài 17. Chuyển hoa thường:
Program chuyen_hoathuong;
Uses crt;
Var i:integer;
S: string;
Begin
Crlscr;
Write(‘Nhap sau S: ‘); Readln(S);
For i:=1 to length(S) do
If S[i] in [‘A’..’Z’] then S[i]:=CHR(ORD(S[i])+32);
Writeln(S);
End.
Bài 18. Chuyển thường hoa:
Program chuyen_thuonghoa;
Uses crt;
Var i: integer;
S: string;
Begin
Clrscr;
Write(‘Nhap xau ki tu S: ‘); Readln(S);
For i:=1 to length(S) do
If S[i] in [‘a’..’z’] then S[i]:=Upcase(S[i]);
Writeln(S);
End.
Bài 19. Chuyển ký tự đầu sang hoa:
Program chuyenkytudausanghoa;
Uses crt;
Var i: integer;
S: string;
Begin
Clrscr;
Write(‘Nhap xau S: ‘); Readln(S);
S[1]:=Upcase(S[1]);
For i:=1 to length(S) do
If S[i]=#32 then S[i+1]:=Upcase(S[i+1]);
Writeln(S);
End.
Bài 20. Nhập vào họ và tên, xuất ra họ, tên đệm, tên:
program hoten;
uses crt;
var st,ho,ten,dem:string;
vt1,vt2:integer;
begin
clrscr;
write('Nhap ho ten: ');readln(st);
vt1:=1;
while st[vt1]<>#32 do vt1:=vt1+1;
ho:=copy(st,1,vt1);
vt2:=length(st);
while st[vt2]<>#32 do vt2:=vt2-1;
ten:=copy(st,vt2,vt2);
dem:=copy(st,vt1+1,length(st)-length(ho)-length(ten));
writeln('Ho la: ',ho);
writeln('Ten dem la: ',dem);
writeln('Ten la: ',ten);
readln;
end.
Bài 21. In từ dài nhất:
{In tu dai nhat trong xau}
program tudainhat;
var st, kq: string;
vt, dai, max, d, i,j: integer;
a:array[1..100] of string;
begin
write('Nhap St:');
readln(st);
max := 0;
st := st + ' ';
d:=0;
while length(st) <> 0 do
begin
vt:= pos(' ', st);
dai:= vt - 1;
kq := copy(st, 1, dai);
inc(d);
a[d]:=kq;
delete(st, 1, vt);
end;
for i:=1 to d do
if length(a[i])>max then
begin
max:=length(a[i]);
j:=1;
end
else if length(a[i])=max then inc(j);
writeln('Co ',j,' tu dai nhat, co chieu dai la: ',max);
writeln('cac tu do la:');
for i:=1 to d do
if length(a[i])=max then writeln(a[i]);
readln;
end.
Bài 22. Xóa kí tự thừa:
Program Xoa_ki_tu_thua;
Uses crt;
Var i: integer;
S: string;
Begin
Clrscr;
Write(‘Nhap xau S: ‘); Readln(S);
While S[1]=#32 do delete(S,1,1);
While S[length(S)]=#32 do delete(S,length(S),1);
While POS(#32#32,S)<>0 do delete(S,POS(#32#32,S),1);
Writeln(S);
End.
Bài 23. Giải nén xâu: Ví dụ: 4a5b -> aaaabbbbb
Program giainenxau;
var s,t:string;
i,so,k,code:integer;
begin
write('Nhap xau: '); Readln(s);
{2ab}

for i:=1 to length(s) do


begin
val(s[i],so,code);
if code=0 then
begin
for k:=1 to so-1 do t:=t+s[i+1];
end
else t:=t+s[i];
end;
write('Giai nen: ', t);
readln;
end.
Bài 24. Nén xâu
Một xâu kí tự có thể nén lại thành 1 một xâu mới bằng cách nén các kí tự
giống nhau đứng cạnh nhau. Ví dụ trong xâu AAAA sẽ nén thành 4A. Hãy lập
trình để nén 1 xâu kí tự in hoa theo cách trên.
Dữ liệu: vào từ file văn bản NENXAU.INP một xâu, mà các kí tự là chữ cái in hoa.
Kết quả: ghi vào file văn bản NENXAN.OUT một xâu kí tự sau khi nén.
VD:
Nenxau.inp Nenxau.out
NNNAAAAFGGH 3N4AF2GH
program nenxau;
uses crt;
var s,snen,stam,t:string;
i,j:integer;
begin
write('Nhap xau can nen: ');readln(s);
snen:='';
stam:='';
i:=1;
j:=1;
repeat
while (s[j]=s[i]) do
begin
stam:=stam+s[j];
j:=j+1;
end;
if (length(stam)>1) then
begin
str(length(stam),t);
snen:=snen+t+s[i];
end
else
snen:=snen+s[i];
i:=j;
stam:='';
until (i>length(s));
s:=snen;
write('Xau nen: ',s);
readln;
end.
Bài 25. Viết chương trình nhập vào xâu, đưa ra xâu đảo theo từ.
Ví dụ: đi xe đạp -> đạp xe đi.
uses crt;
var s:string;
i,j,z:byte;
begin
write('Nhap vao mot xau: ');
readln(s);
z:=length(s);
for i:=z downto 1 do
if ((s[i]=' ') or (i=1)) then
begin
for j:=i to z do write(s[j]);
z:=i;
end;
delete(s,1,1);
delete(s,length(s),1);
readln;
end.
Bài 26. Đếm chữ trong chuỗi:
Program Dem_chu;
Var chuoi:String;
i,dem,dai:Byte;
Begin
Writeln('DEM CHU ''ng'' TRONG CHUOI');
Writeln('----------------------');
Write('-Nhap mot chuoi bat ky: ');
Readln(chuoi);
dem:=0;
dai:=length(chuoi);
For i:=1 To dai Do
If chuoi[i]+chuoi[i+1]='ng' Then
inc(dem);
Writeln;
Writeln('Trong cau: ','" ',chuoi,' "');
Writeln('Co ',dem,' lan xuat hien chu ''ng''');
Writeln;
Writeln(' Bam phim <Enter> de ket thuc');
Readln
End.
Chữ số thứ K:

program sothuk;
uses crt;
var a:array[1..100] of integer;
i,j,n,k:longint;
s,s1:string;
begin
write('Nhap N: ');readln(n);
s:='';
for i:=1 to n do
begin
write('Nhap so a[',i,']= ');
readln(a[i]);
str(a[i],s1);
s:=s+s1;
end;
write('Nhap vi tri: ');readln(k);
write(s[k]);
readln;
end.
program sothuk;
uses crt;
n,i,k:longint;
s,s1:string;
begin
write('Nhap N: ');readln(n);
s:='';
for i:=1 to n do
begin
str(i,s1);
s:=s+s1;
end;
write('Nhap vi tri: ');readln(k);
write(s[k]);
readln;
end.

rogram tongsoxau;
uses crt;
var st:string;
s,i,t,dem:integer;
begin
write('Nhap vao 1 xau: ');readln(st);
s:=0;
dem:=0;
for i:=1 to length(st) do
if st[i] in ['1'..'9'] then
begin
val(st[i],t);
dem:=dem+1;
s:=s+t;
end;
writeln('so chu so trong xau: ',dem);
writeln('Tong cac so trong xau: ',s);
for i:=length(st) downto 1 do
if st[i] in ['1'..'9'] then delete(st,i,1);
writeln('Xau sau khi xoa so la: ',st);
readln;
end.
Cộng hai số lớn
program congsolon;
uses crt;
var s1,s2,h,h1,h2:string;
nho,a,b,tam,max,l1,l2,i,code:integer;
begin
write('Nhap so thu nhat: ');readln(s1);
write('Nhap so thu hai: ');readln(s2);
l1:=length(s1);
l2:=length(s2);
if l1>l2 then max:=l1 else max:=l2;
For i:=L1+1 to Max do s1:='0'+s1;
For i:=L2+1 to Max do s2:='0'+s2;
nho:=0;
h:='';
For i:=max downto 1 do
Begin
val(s1[i],a,code);
val(s2[i],b,code);
tam:=a+b+nho;
if tam>=10 Then nho:=1 Else nho:=0;
str(tam Mod 10,h1);
h:=h+h1;
End;
h2:='';
for i:=length(h) downto 1 do h2:=h2+h[i];
write('Tong hai so la: ',h2);
readln;
end.
program chanle;
uses crt;
var n,k,i:integer;
stle,stchan,st1,st2:string;
begin
write('Nhap so N: ');readln(n);
write('Nhap vi tri: ');readln(k);
stle:='';
for i:=1 to n do
if i mod 2=1 then
begin
str(i,st1);
stle:=stle+st1;
end;
stchan:='';
for i:=1 to n do
if i mod 2=0 then
begin
str(i,st2);
stchan:=stchan+st2;
end;
insert(stle,stchan,1);
writeln('day so: ',stchan);
writeln('so o vi tri can tim: ',stchan[k]);
readln;
end.

program thugonso;
uses crt;
var n,m,i,j:integer;
st,st1,stle,stchan:string;
begin
write('Nhap so n: ');readln(n);
st:='';
for i:=1 to n do
begin
str(i,st1);
st:=st+st1;
end;
writeln('so m la: ',st);
repeat
stle:='';
for i:=1 to length(st) do
if i mod 2=1 then stle:=stle+st[i];
st:=stle;
stchan:='';
for i:=1 to length(st) do
if i mod 2=0 then stchan:=stchan+st[i];
st:=stchan;
until (length(st)=1);
writeln(st);
readln;
end.

program daten;
uses crt;
var i,j,n,k,dem,z,l,dk,dem2:integer;
a:array[1..100] of string;
s,s1,s2:string;
begin
clrscr;
dem:=0;
{
write('hay nhap vao s: ');readln(s);
z:=length(s);
for i:=1 to length(s) do
begin
for j:=1 to z do
begin
dem:=dem+1;
k:=k+1;
a[k]:=copy(s,i,j);
end;
z:=z-1;
end;
}
write('hay nhap vao s: ');readln(s);
z:=length(s);
for i:=1 to length(s) do
begin
for j:=1 to z do dem:=dem+1;
z:=z-1;
end;
i:=0;
z:=length(s);
dem2:=0;
while(i<z) do
begin
i:=i+1;
for j:=i+1 to z do
begin
if s[i]=s[j] then
begin
delete(s,j,1);
dem:=dem-1;
z:=z-1;
end;
end;
end;

writeln;
writeln(dem);
i:=1;
dk:=0;
while(dk<1) do
begin
i:=i+1;
if dem mod i=0 then
begin
write(i,'.',dem div i);
dk:=2;
end;

end;
readln;
end.

program Timlap;
uses crt;
var i,n,j,k:integer;
a,b:array[1..100] of longint;
tam,dem:longint;
st,st1,st2:string;
begin
clrscr;
write('hay nhap vao n: ');readln(n);
for i:=1 to n do
begin
write('hay nhap vao phan tu: ');readln(a[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do

if a[i]>a[j] then
begin
tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
end;
dem:=1;
i:=0;
while i<n do
begin
i:=i+1;
j:=i+1;
if a[i]=a[j] then dem:=dem+1;
if dem>=2 then
begin
k:=k+1;

b[k]:=a[i];
i:=i+1;
dem:=1;
end;
end;
writeln(k);
for i:=1 to k do
write(b[i],' ');
readln;
end.
program bai;
uses crt;
var i,n,j,k,dem,l:integer;
s,s1:array[1..100] of string;
begin
clrscr;
write('hay nhap vao k: ');readln(k);
write('hay nhap vao n: ');readln(n);
for i:=1 to k do
begin
write('ma diet: ');readln(s[i]);
end;
for i:=1 to n do
begin
write('truong trinh virus: ');readln(s1[i]);
end;
dem:=0;
for i:=1 to k do
begin

for j:=1 to n do
begin
l:=1;
while l<=length(s1[j]) do
begin
if copy(s1[j],l,length(s[i]))=s[i] then
begin
delete(s1[j],l,length(s[i]));
dem:=dem+1;
end;
l:=l+1;
end;
end;
end;
writeln(dem);
for i:=1 to n do
writeln(s1[i]);
readln;
end.
program songto;
uses crt;
var a:array[1..100] of integer;
m,i,k,n,j:integer;
st:string;
begin
write('Nhap chuoi so: ');readln(st);
write('Nhap so M: ');readln(m);
k:=1;
i:=1;
while i<=length(st) do
begin
val(copy(st,i,m),n);
a[k]:=n;
k:=k+1;
i:=i+m;
end;
for i:=1 to k-1 do
if a[i] mod 2=1 then write(a[i]:5);
writeln;
for i:=1 to k-1 do
if a[i] mod 2=1 then
begin
j:=2;
while (a[i] mod j<>0) and (j<a[i]) do j:=j+1;
if a[i]=j then write(a[i]:5);
end;
readln;
end.
Program sapxepsotrongxau;
Uses crt;
var a,b:array[1..100] of integer;
i,j,k,m,n,s,tam:integer;
st1,st2,t:string;
begin
write('Nhap vao chuoi ky tu: ');readln(st1);
k:=1;
for i:=1 to length(st1) do
if st1[i] in ['0'..'9'] then
begin
val(st1[i],tam);
a[k]:=tam;
k:=k+1;
end;
for i:=1 to k-2 do
for j:=i+1 to k-1 do
if a[i]>a[j] then
begin
tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
end;
st2:='';
for i:=1 to k-1 do
begin
str(a[i],t);
st2:=st2+t;
end;
k:=1;
for i:=1 to length(st1) do
if st1[i] in ['0'..'9'] then
begin
st1[i]:=st2[k];
k:=k+1;
end;
write(st1);
readln;
end.

You might also like