Đến nội dung

The Dark Hunter

The Dark Hunter

Đăng ký: 17-03-2016
Offline Đăng nhập: 06-10-2016 - 23:03
-----

Chuỗi gần đúng

13-08-2016 - 00:30

Hai chuỗi gọi là gần đúng khi các ký tự của chuỗi gốc xuất hiện trong chuỗi kia
theo đúng thứ tự như chuỗi gốc. Số kí tự sai khác được tính thành tỉ lệ phần trăm so
với chuỗi có độ dài lớn hơn. Nếu tỉ lệ % sai khác không lớn hơn m% thì ta gọi đây
là 2 chuỗi gần đúng.
Ví dụ: xem hình sau:
Trong hình trên, độ sai lệch giữa mispeld misspelled là 3 kí tự; tỉ lệ là 3/10
tức 30%.
* Yêu cầu: Viết chương trình tìm các chuỗi gần đúng so với chuỗi gốc.
Fie dữ liệu vào cho trong File BAI2.INP. Hàng đầu tiên là m (số nguyên giá trị
từ 1 đến 50). Hàng kế tiếp là chuỗi gốc; các hàng còn lại là các chuỗi cần xác định
có gần đúng với chuỗi gốc đã cho hay không. Chuỗi chỉ gồm các kí tự chuẩn trong
bảng mã ASCII và không có khoảng trắng trong chuỗi; chiều dài chuỗi không quá
254 kí tự.
Kết quả ghi trong File dữ liệu ra BAI2.OUT; gồm chuỗi gốc và các chuỗi gần
đúng với chuỗi gốc (không phân biệt chữ hoa/thường). Mỗi chuỗi được ghi trên 1
hàng.
Ví dụ:
BAI2.INP BAI2.OUT
30 mispeld
mispeld misspelled
misplace
misspelled
mislead

 

M.n giúp tìm lỗi sai với:

uses crt;
var f1,f2:text;n:integer;s1,s2:string;
function sai_so(s1,s2:string):integer;
var a:string;k1,k2,i,b,c,S,H:integer;
begin
k1:=length(s1);
k2:=length(s2);
S:=0;a:=s2;
for i:=1 to k1 do
    begin
    c:=pos(s1[i],a);
    b:=k2-length(a)+c;
    if c>0 then
       begin
       S:=S+c-1;
       a:=copy(s2,b+1,k2-b);
       end
       else
       begin
       S:=0;break;
       end;
    end;
sai_so:=S;
 
end;
begin
clrscr;
assign(f1,'input.txt');
reset(f1);
assign(f2,'output.txt');
rewrite(f2);
while not eof(f1) do
begin
     read(f1,n,s1,s2);
     writeln(f2,sai_so(s1,s2));
end;
close(f1);close(f2);
readln
end.