字符串分割函数,大家看看哪里有错误。

sy_315 2007-12-26 02:11:45
用法str78(目标字符串),返回每78行分割的字符串

function str78(Deststr : string):string;stdcall;
var
i : integer;
len : integer;
ostr : string;
s : widestring;
c : string;
Turelen : integer;

begin
s := deststr;
len:= length(s);
Turelen :=0;
ostr :='';

for i := 1 to len do
begin
c := s[i];
if length(c) > 1 then
begin //汉字字符
if (((Turelen mod 78) =0) or ((Turelen mod 78) = 77)) and (Turelen <>0) then
begin
ostr:=ostr+#13#10;
ostr:=ostr+'\\';
Turelen:=Turelen+2;
end;
ostr := ostr + c;
Turelen:=Turelen+2;
end
else
begin //普通字符
if ((Turelen mod 78) = 0) and (Turelen <>0) then
begin //普通字符判断似乎没有生效
ostr:=ostr+#13#10;
ostr:=ostr+'\\';
Turelen:=Turelen+2;
end;
ostr := ostr + c;
Turelen:=Turelen+1;
end;

end;
result := ostr;
end;
...全文
213 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sy_315 2007-12-26
  • 打赏
  • 举报
回复
真是无语了...其实函数本身没有问题,是程序引用的时候少了一块,才给人错觉的显示函数有问题。浪费大家时间了,实在不好意思啦:)
sy_315 2007-12-26
  • 打赏
  • 举报
回复
我索性又写了一个函数...这回测试是通过的。

//filter 78 换行
function str78(Deststr : string):string;stdcall;
var
i : integer;
len : integer;
ostr : string;
s : widestring;
c : string;
Turelen : integer;
strl : tstringlist;
lencur : integer;
begin
{--算法
1.判断循环体次数
2.判断汉字
}
s := deststr;
len:= length(s);
lencur :=0;
ostr :='';
//此长度非彼长度
strl := tstringlist.Create;
strl.Clear;

for i := 1 to len do
begin
strl.Add(s[i]);
end;

for i := 0 to strl.Count-1 do
begin

c := strl.Strings[i];
len := length(c);
lencur := lencur+len;
ostr := ostr + strl.Strings[i];

if ((lencur mod 77) = 0) and (lencur <> 0) then
begin
c := strl.Strings[i+1]; //判断下一个字符是否是汉字
len := length(c);
if (len > 1) then
begin //如果是汉字,则处理,否则不处理
ostr := ostr + #13#10 ;
ostr := ostr +'\\';
lencur := 2;
//还原字符
c := strl.Strings[i];
len := length(c);
end
end;

if ((lencur mod 78) = 0) and (lencur <> 0) then //正常情况
begin
ostr := ostr + #13#10 ;
ostr := ostr +'\\';
lencur := 2;
end;
end;
result := ostr;
end;


sy_315 2007-12-26
  • 打赏
  • 举报
回复
这个'\\'是算在下一行开始的部分,所以turelen的值要计算进去。
stherix 2007-12-26
  • 打赏
  • 举报
回复
ostr:=ostr+#13#10;
ostr:=ostr+'\\';
Turelen:=2; ////这里要Turelen:=0



begin //普通字符判断似乎没有生效
ostr:=ostr+#13#10;
ostr:=ostr+'\\';
Turelen:=2;////这里要Turelen:=0

我已经调试通过了
sy_315 2007-12-26
  • 打赏
  • 举报
回复
我重新修改一下:
用法str78(目标字符串),返回每78个字符分割的字符串

function str78(Deststr : string):string;stdcall;
var
i : integer;
len : integer;
ostr : string;
s : widestring;
c : string;
Turelen : integer;

begin
s := deststr;
len:= length(s);
Turelen :=0;
ostr :='';

for i := 1 to len do
begin
c := s[i];
if length(c) > 1 then
begin //汉字字符
if (((Turelen mod 78) =0) or ((Turelen mod 78) = 77)) and (Turelen <> 0) then
begin
ostr:=ostr+#13#10;
ostr:=ostr+'\\';
Turelen:=2;
end;
ostr := ostr + c;
Turelen:=Turelen+2;
end
else
begin //普通字符
if ((Turelen mod 78) = 0) and (Turelen <> 0) then
begin //普通字符判断似乎没有生效
ostr:=ostr+#13#10;
ostr:=ostr+'\\';
Turelen:=2;
end;
ostr := ostr + c;
Turelen:=Turelen+1;
end;

end;
result := ostr;
end;
sy_315 2007-12-26
  • 打赏
  • 举报
回复
帖子有问题,清零我试过了,也是不成的。
stherix 2007-12-26
  • 打赏
  • 举报
回复
分行之后 把Turelen置零
brightyang 2007-12-26
  • 打赏
  • 举报
回复
汉字占两位

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧