有点难度,解决马上给分!进来看看吧! (200分)

  • 主题发起人 主题发起人 fjdelphiboy
  • 开始时间 开始时间
F

fjdelphiboy

Unregistered / Unconfirmed
GUEST, unregistred user!
用什么算法,比较两个文本文件a.txt,b.txt的内容,文件不会太长500字左右,通过算法
实现b.txt与a.txt按"顺序"进行比较(不包括标点,空格)得出它对了几个字,错了几。
我想了很久,还是想不出什么好的算法,请大家帮忙一起讨论。小弟在此谢了!
 
帮你up吧~~:)
 
最可靠的办法就是一行一行,一列一列比较,
你就写几个循环就行了,先解决问题再说吧
 
用两个动态数组aa,bb,分别把a和b 两文件的字符分别读入aa和bb数组里,然后在作比较
,好了 ,后面的事,不用我教了吧,应该会了。
 
使用数组读入字符,用循环语句作比较。
 
像前面兄台所说的,先把两个文本文件读入到两个数组或字符串,再比较就OK了
 
这是个找子序列的问题,这个算法在程序员杂志有介绍, 可以到 www.csdn.net 去看看.
 
to quejian
我也想过用数组进行比较,但用什么算法进行比较呢,能否给出程序的过程
 
procedure Compare(const FileNameA, FileNameB: string;
var Correct, Wrong: Integer);
var
a, b: TextFile;
sa, sb: string;
i: Integer;
function Min(a, b: Integer): Integer;
begin
if a<b then
Result:=a
else
Result:=b
end;
begin
Correct:=0;
Wrong:=0;
AssignFile(a, FileNameA);
AssignFile(b, FileNameB);
Reset(a);
Reset(b);
while not Eof(a)do
begin
ReadLn(a, sa);
ReadLn(b, sb);
for i:=1 to Min(Length(sa), Length(sb))do
begin
if not (sa in ['.',',']) then
//把你所有不需要比较的都写在里面
if sa=sb then
Inc(Correct)
else
Inc(Wrong)
end;
Inc(Wrong, Abs(Length(sa)-Length(sb)))
end
end;
 
呵呵,高手,那么快就写了出来
其实这个题目太难了,逐行比较未必可靠,
我想还是应该先把整个文本中不要比较的字符去掉以后再比较,
这样比较可靠些,
问题是哎,还是太复杂了,比如说在a中开头加一个字符'a'以后作为b文本,那么结果会不会
是没有相同的内容呢?
 
谢谢大家的参与。
这算法应该很复杂的,如 "来如风" GG所说的,不是针对固定位置的比较。
而是要根据它的前后的字符进行判断,我想应该有点像求最长公共子序列。
强烈欢迎大家进行讨论。
 
我给你源码,一看就知道了[:)]
如要请至信:li_cj@hotmail.com
 
谢谢li_cj!
如果解决马上给分
 
to li_cj
谢谢你给的代码,不知道是我看不懂还是什么,感觉你的代码并不能得出它的对了
几个,错了几个。你给的程序运行的结果是,一个挨一个的进行比较。这种方法,不能
实现本题的功能啊。
 
用汇编来编写些程序可能简单一点!
先找出两个文件的头地址至于怎么找!我的办法可能麻烦!请另找高人,
然后用比较语句cmp来实现,一个字一个字的比下去(能常中文在内存里面都是以字的大小来存的)
如果发现有不对的地方就计数,这样下来就可以得出错了几个字了!再用总数来减就得出正确的
总数=比较的次数
 
后退
顶部