问这个程序何时会出现存取非法的情况(PASCAL)

来源:百度知道 编辑:UC知道 时间:2024/06/02 21:42:56
type
pl=^node;
node=record num:longint; sl:array ['a'..'z'] of pl; tl:shortint; end;
var
now,root:pl;
max,i,j,k,n,m:longint;
s:string;
procedure add;
var
next,now:pl;
len,j:longint;
begin
now:=root;
len:=length(s);
for j:=1 to len do
begin
next:=now^.sl[s[j]];
if next<>nil then now:=next
else begin
new(next);
now^.sl[s[j]]:=next;
if now^.tl=1
then next^.num:=now^.num+1
else next^.num:=now^.num;
now:=next;
if j=len then now^.tl:=1;
if now^.num>max then max:=now^.num;
end;
end;
end;
begin
new(root);
root^.tl:=1;
readln(n);
max:=0;
for i:=1 to n do
begin
readln(s);
add;
end;
writeln(max);
end.
--------------------------
输入:先是一个n,然后是n个单词(4 i int integer intern);
输出:这些单词中最大嵌套层数(i-->int-->integer),要求必须是前缀才能嵌套;
上述程序在测试时有2个点“程序输出比正确答案长”,有一个点存

单词的长度可能超过255位,所以应该用无限长字符串ansistring,否则会存取非法。
还有,这个题目不应该用指针来写,因为极限数据肯定是可以接受的,所以用数组来代替指针。
因为我不知道你的题目是哪里的,所以也不好改,最好把题目地址发上来吧。