AdminAdminPosts : 122Danh tiếng : 7Join date : 10/11/2014Age : 23 | Tiêu đề: Giải các bài toán về xâu kí tự 13/11/2014, 12:18 | Bài 1: Nhập xâu kí tự bất kì a) Đếm số lần xuất hiện của 1 kí tự nào đó trong câu.b) Liệt kê các kí tự có mặt trong xâu cùng số lần xuất hiện của các kí tự đó.Bài giải:uses crt;var str:string[100];chu:array[#1..#254] of integer;i:integer;ch:char;beginclrscr;for ch:=#1 to #254 do chu[ch]:=0;write(' Nhap chuoi = ');readln(str);for i:=1 to length(str) do(chu[upcase(str[i])]):=chu[upcase(str[i])] +1;writeLn('Cac ki tu trong xau la:');for ch:=#1 to #254 doif chu[ch]>0 then writeln(ch, ': xuat hien ',chu[ch],' lan');readln;end.Bài 2: Nhập 1 xâu kí tự.a) Xét xem trong xâu có K kí tự kề nhau mà như nhau hay không?b) Hãy xóa đi kí tự kề nhau mà như nhau, chỉ giữ lại một.Bài giải:uses crt;var ch:string[100]; i,k,d,d1,n:integer;(*****)function xoa:boolean;var i:integer;begin xoa:=false; for i:=1 to length(ch)-1 do if ch[i]=ch[i+1] then begin delete(ch,i,1); xoa:=true; exit end;end;(*****)beginclrscr; write('Nhap chuoi :');readln(ch); write('Nhap ki tu K:');readln(k); n:=length(ch); d:=0;d1:=0; for i:=1 to n-1 do begin if ch[i]=ch[i+1] then inc(d1) else d1:=0; if d1+1>=k then inc(d); end; if d>0 then writeln('Co ',k,' ki tu nhu nhau') else writeln('Khong co ',k,' ki tu nhu nhau'); while xoa do; write('In lai xau sau khi xoa:'); writeln(ch);readln;end.Bài 3: Nhập 1 xâu kí tự. Kiểm tra tính đối xứng của xâu đó. Nếu xâu không đối xứng thì đảo xâu.Bài giải:uses crt;var str,s:string[100];n,i:integer;(*****)procedure sx(var a,b:char);var tam:char;begin tam:=a; a:=b; b:=tam;end;procedure dao(n,i:integer);var j:integer;begin for j:=i+1 to n do if str[i]=str[j] then begin sx(str[j],str[n-i+1]); exit end;end;(*****)beginclrscr; write('Nhap xau:');readln(str); n:=length(str); s:=''; for i:=n downto 1 do s:=s+str[i]; if str=s then writeln('Chuoi doi xung:') else begin writeln('Chuoi ko doi xung, chuoi da dao doi xung:'); for i:=1 to n-1 do dao(n,i); end; writeln(str);readln;end.Bài 4: Cho 1 xâu kí tự. Tính xem trong số đó có bao nhiêu loại kí tự khác nhau ( không phân biệt in hoa hay in thường).Bài giải:uses crt;var s:string;i,j,dem:integer;t:boolean;beginclrscr; write('Nhap xau:');readln(s); dem:=0; for i:=1 to length(s) do begin t:=false; for j:=1 to i-1 do if((s[j])=(s[i])) then t:=true; if not(t) then inc(dem); end; write('Co ',dem,' ki tu khac nhau.');readln;end.Bài 5: Cho 1 xâu kí tự bất kì, tính:a) Số lượng các kí tự số.b) Số lượng các kí tự chữ cái.Bài giải:uses crt;const so: set of char=['0','1','2','3','4','5','6','7','8','9'];var st,b:string; a:array[1..100] of integer; i,j,l,n,dem,dem1,c:integer;(*****)procedure sx(var x,y:integer);var tam:integer;begin tam:=x; x:=y; y:=tam;end;(*****)beginclrscr; write('nhap xau:');readln(st); dem:=0; dem1:=0; for i:=1 to length(st) do begin if (st[i] in['0'..'9']) then inc(dem); if (upcase(st[i]) in['A'..'Z']) then inc(dem1); end; write('Co ',dem1,' chu cai.'); writeln; writeln('Co ',dem,' chu so.'); l:=length(st); i:=1; n:=0; repeat if (st[i] in so) then begin b:=''; repeat b:=b+st[i]; inc(i); until (not(st[i] in so)) or (i>l); inc(n); val(b,a[n],c); end; inc(i); until i>l; for i:=1 to n do write(a[i]:5); writeln; writeln('Sx tang:'); for i:=1 to n-1 do for j:=i to n do if a[j]<a[i] then sx(a[j],a[i]); for i:=1 to n do write(a[i]:5);readln;end.Bài 6: Cho 1 xâu kí tự bất kì (cả số lẫn chữ). Viết chương trình tách các phần là số của xâu trên và đưa ra 1 mảng số nguyên.Bài giải:uses crt;const so: set of char=['0','1','2','3','4','5','6','7','8','9'];var a:array[1..100] of integer;st,b:string;c,l,i,n,j:integer;(*****)procedure sx(var x,y:integer);var tam:integer;begin tam:=x; x:=y; y:=tam;end;(*****)beginclrscr; write('Nhap xau:');readln(st); l:=length(st); i:=1; n:=0; repeat if (st[i] in so) then begin b:=''; repeat b:=b+st[i]; inc(i); until (not(st[i] in so)) or (i>l); inc(n); val(b,a[n],c); end; inc(i); until i>l; for i:=1 to n do write(a[i]:5); writeln; write('Sx tang:'); writeln; for i:=1 to n-1 do for j:=i to n do if a[j]<a[i] then sx(a[j],a[i]); for i:=1 to n do write(a[i]:5);readln;end.Bài 7: Nhập vào 1 xâu. Biến đổi thành chữ in hoa.Bài giải:uses crt;var s:string; i,k:integer;beginclrscr; write('Nhap xau:');readln(s); write('Bien doi in hoa:'); for i:=1 to length(s) do write(upcase(s[i]));readln;end.Bài 8: Nhập vào 1 xâu. Biến đổi in thường.Bài giải:uses crt;var s:string; i:integer;beginclrscr; write('Nhap xau:');readln(s); for i:=1 to length(s) do if s[i] in ['A'..'Z'] then s[i]:=chr(ord(s[i])+32); write('Bien doi thuong:',s);readln;end.Bài 9: Nhập vào 1 chuỗi, in ra chuỗi ngược.Bài giải:uses crt;var s:string; i:integer;beginclrscr; write('nhap chuoi:');readln(s); write('Chuoi nguoc:'); for i:=length(s) downto 1 do write(s[i]);readln;end.Bài 10: Nhập vào danh sách HS 1 lớp. Sắp xếp lại danh sắp theo thứ tự tăng dần theo chiều dài của tên.Bài giải:uses crt;var hs:string; i,j,n:integer;(******)procedure sx(var a,b:integer);var tam:integer;begin tam:=a; a:=b; b:=tam;end;(******)beginclrscr; write('Nhap so HS:');readln(n); for i:=1 to n do begin write('Ten HS thu ',i,' :');readln(hs[i]); end; for i:=1 to n-1 do for j:=i+1 to n do if length(hs[i]) > length(hs[j]) then sx(hs[i],hs[j]); writeln('Sx theo do dai ten:'); for i:=1 to n do writeln(hs[i]);readln;end.Bài 11: Nhập vào họ tên bất kì sau đó biến đổi các chữ cái đầu tiên là in hoa.Bài giải:uses crt;const chu=['a'..'z']; var hoten:string; i,k:integer;beginclrscr; write('Nhap ho ten:');readln(hoten); k:=length(hoten); if hoten[1] in chu then hoten[1]:=upcase(hoten[1]); for i:=2 to k do if (hoten[i-1]=#32) and (hoten[i] in chu) then hoten[i]:=upcase(hoten[i]); write('sau khi bien doi:',hoten);readln;end.Bài 12: Nhập vào 1 đoạn văn. Tính số câu.Bài giải:uses crt;var s:string; i,d:integer;beginclrscr; write('Nhap 1 doan:');readln(s); for i:=1 to length(s) do if s[i]='.' then inc(d); write('Doan tren co ',d,' cau.');readln;end.Bài 13: Nhập vào 1 số, xóa bỏ các chữ số lẻ. Xuất kết quả dưới dạng đối xứng của phần còn lại.Vd:1 2 4 5 6 --> 2 4 6 6 4 2Bài giải:uses crt;const so=['1','3','5','7','9'];var s:string; i:integer;beginclrscr; write('Nhap 1 day so:');readln(s); i:=1; while i<=length(s) do if s[i] in so then begin delete(s,i,1); i:=1; end else inc(i); write('Sau khi xoa cac so le va bien doi doi xung:',s); for i:=length(s) downto 1 do write(s[i]);readln;end.Bài 14: Nhập vào 1 số, xóa bỏ các chữ số chẵn. Kiểm tra số còn lại có bao nhiêu chữ số. Xuất kết quả dưới dạng đối xứng của phần còn lại.Bài giải:uses crt;const so=['0','2','4','6','8'];var s:string; i,dem:integer;beginclrscr; dem:=0; write('Nhap 1 day so:');readln(s); i:=1; while i<= length(s) do if s[i] in so then begin delete(s,i,1); i:=1; end else inc(i); for i:=1 to length(s) do dem:=dem+1; writeln('Sau khi xoa cac so chan con ',dem,' so le .'); write('Sau khi xoa cac so chan va bien doi doi xung :',s,' '); for i:=length(s) downto 1 do write(s[i]);readln;end.Bài 15: Nhập chuỗi gồm cả chữ và số. Xuất ra màn hình các số riêng và các chữ riêng. Hãy đếm số lần xuất hiện của mỗi chữ, mỗi số.Bài giải:uses crt;var s:string; dem:array[#1..#254] of integer; i:integer; chu:char;begin clrscr; write('Nhap chuoi gom chu va so:');readln(s); for chu:=#1 to #254 do dem[chu]:=0; writeln('Chu:'); for i:=1 to length(s) do if upcase(s[i]) in ['A'..'Z'] then begin write(s[i]); dem[upcase(s[i])]:=dem[upcase(s[i])] +1; end; writeln; writeln('So:'); for i:=1 to length(s) do if s[i] in ['0'..'9'] then begin write(s[i]); dem[s[i]]:=dem[s[i]] +1; end; writeln; for chu:=#1 to #254 do if dem[chu]<>0 then writeln(chu,' xuat hien ',dem[chu],' lan'); readln;end.Bài 16: Nhập 1 xâu kí tự và bỏ đi tất cả các khoảng trống bên trái của nó.Bài giải:uses crt;var s,t:string; i,p:integer;begin clrscr; write('Nhap chuoi:');readln(s); writeln('khoang trong ben trai cua chuoi da bo, chuoi:'); while s[1]=#32 do delete(s,1,1); write(s); readln;end.Bài 17: Dùng hàm “copy”. Tách từ đầu tiên ra khỏi 1 xâu kí tự cho trước.Bài giải:uses crt;var s:string; i:integer;begin clrscr; write('Nhap chuoi:');readln(s); writeln('Tach tu dau tien ra khoai xau:'); write(copy(s,1,1)); readln;end. | LikeDislike |
|