遇到一个奇怪的字符串比较问题

五岳独尊是泰山 2018-06-23 09:58:48
var
flist: TStringList;
i: Integer;
str, s,s2, s3: string;
begin
flist := TStringList.create;
str := '中囯银行';
s := '601988 中国银行'; //TAB键分割
s2 := '';
ExtractStrings([#9, ',', ';'], [], PChar(s), flist);
if flist.count > 1 then
begin
s3 := trim(flist.Strings[1]);
if (str = s3) then //( or (Pos(str, s3) > 0) or (Pos(s3, str) > 0)) then
begin
s2 := flist.Strings[0];
end;
end;
ShowMessage(s2);
flist.Free;
end;
----------------------------
调试时候str明明跟s3内容一样,但就是不能成立,s2始终为空。delphi 7 环境
...全文
281 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 hongss 的回复:
你的 str := '中囯银行'; 和 s := '601988 中国银行'; 里边的 “国”字不一样~~~


哪里不一样了,复制粘贴也是如此,遇到“中国”的字符串比较就出这种问题
秋天之落叶 2018-06-28
  • 打赏
  • 举报
回复
引用 11 楼 iamtryit 的回复:
[quote=引用 10 楼 leavesguth 的回复:]
两个根本不是一个字,当然出错了

哈哈,还真是,搜狗拼音怎么还有这个生僻字哦
不过改成完全一样的之后问题依旧,比较的时候还是不相等。

str := '中国银行';
s := '中国银行';
但这样比较的话就是成立的
[/quote]
上面不是说了,把#9改成' ',把'囯'改成'国',一切OK,我已经再XE10.2版本下运行通过。
hongss 2018-06-28
  • 打赏
  • 举报
回复
自己Copy过去测试,然后找哪里不一样~~

var
flist: TStringList;
i: Integer;
str, s,s2, s3: string;
begin
flist := TStringList.create;
str := '中国银行';
s := '601988 中国银行'; //TAB键分割
s2 := '';
ExtractStrings([' ', ',', ';'], [], PChar(s), flist);
if flist.count > 1 then
begin
s3 := trim(flist.Strings[1]);
if (str = s3) then //( or (Pos(str, s3) > 0) or (Pos(s3, str) > 0)) then
begin
s2 := flist.Strings[0];
end;
end;
ShowMessage(s2);
flist.Free;
end;
  • 打赏
  • 举报
回复
引用 10 楼 leavesguth 的回复:
两个根本不是一个字,当然出错了

哈哈,还真是,搜狗拼音怎么还有这个生僻字哦
不过改成完全一样的之后问题依旧,比较的时候还是不相等。

str := '中国银行';
s := '中国银行';
但这样比较的话就是成立的
秋天之落叶 2018-06-28
  • 打赏
  • 举报
回复
两个根本不是一个字,当然出错了
秋天之落叶 2018-06-28
  • 打赏
  • 举报
回复
引用 8 楼 iamtryit 的回复:
[quote=引用 2 楼 hongss 的回复:]
你的 str := '中囯银行'; 和 s := '601988 中国银行'; 里边的 “国”字不一样~~~


哪里不一样了,复制粘贴也是如此,遇到“中国”的字符串比较就出这种问题[/quote]
抬杠,不一样就是不一样,你自己比较一下:囯<>国
  • 打赏
  • 举报
回复
是TAB被转换成了了空格所致,再就是没注意“国”还有个异体字,做实验时候输入错误,呵呵,可以结贴了,分数送给秋天之落叶!
  • 打赏
  • 举报
回复
s := '601988 中国银行'; //TAB键分割
这个只是举例,其实大部分数据都在MEMO里面的,单步跟踪比较的时候大部分都是对的,但遇到带“中国”名称的字符串比较的时候就出问题,怪了!
  • 打赏
  • 举报
回复
可以直接写:s := '601988'#9'中国银行';
秋天之落叶 2018-06-25
  • 打赏
  • 举报
回复
把ExtractStrings([#9, ',', ';'], [], PChar(s), flist);
改成ExtractStrings([' ', ',', ';'], [], PChar(s), flist);

把楼上说的 '中囯银行'改成'中国银行'

一切OK

要想使用tab,你可以写成 s := '601988'+#9+'中国银行'; // TAB键分割
否则代码中一律按照空格处理。
xiaocongzhi 2018-06-25
  • 打赏
  • 举报
回复
Tab键直接用ascii码#9,不要直接放在''内
hongss 2018-06-25
  • 打赏
  • 举报
回复
你的 str := '中囯银行'; 和 s := '601988 中国银行'; 里边的 “国”字不一样~~~
fushidi 2018-06-25
  • 打赏
  • 举报
回复
你这段代码我测试了一下(Delphi6环境), 根本没有进去判断(str = s3), 因为flist.count=1;
建议你检查下你怎么分割字符串的吧
  • 打赏
  • 举报
回复
哎,我怎么变成6级了,我记得以前是7级来的...

16,748

社区成员

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

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