if语句检查字符串 [英] If statement for checking strings

查看:555
本文介绍了if语句检查字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我试图确定两个不同的字符串是否与

So I'm trying to determine if two different strings are the same with

 if DerobModel.ConstructionCount > 22 then
 begin
   for i := 22 to DerobModel.ConstructionCount-1 do
   begin
     ConstructionName[i] := DerobModel.Constructions[i].Name;
     ShowMessage(ConstructionName[i]);
     ShowMessage(DerobModel.HouseProperties.StringValue['NWall']);
     if ConstructionName[i]=DerobModel.HouseProperties.StringValue['NWall'] then
     begin
       ShowMessage('Hej');
       igSurf[0]:=idWallCon[i];
     end;
     LayerCount[i] := DerobModel.Constructions[i].LayerCount;
     idWallCon[i] := i+1;
   end;
 end;

两个字符串的ShowMessage返回相同的字符串,但不知何故不会在if声明。任何想法?

The ShowMessage for both of the strings returns the same string but somehow it won't go in the if statement. Any ideas?

推荐答案

你的字符串是不同的,简单的。

如果你想弄清楚什么是不同的,你可以写一个其他块部分来比较字符串的详细信息,并显示出什么是不同的。

Your strings are different, simple as that.
If you want to figure out what exactly is different, you could write an else block portion to compare the strings in detail and show you exactly what is different.

if ConstructionName[i]=DerobModel.HouseProperties.StringValue['NWall'] then
begin
  ShowMessage('Hej');
  igSurf[0]:=idWallCon[i];
end
else
begin
  if (Length(ConstructionName[i]) <> 
      Length(DerobModel.HouseProperties.StringValue['NWall'])) then
  begin
    ShowMessage('Length('+IntToStr(Length(ConstructionName[i]))+') <> Length('+
                IntToStr(Length(DerobModel.HouseProperties.StringValue['NWall']))+')');
  end
  else
  begin
    for LCharPos := 1 to Length(ConstructionName[i]) do
    begin
      if (ConstructionName[i][LCharPos] <> 
          DerobModel.HouseProperties.StringValue['NWall'][LCharPos]) then
      begin
        //Here you might need to rather show the ordinal values of the 
        //characters to see the difference if they **look** the same due 
        //to the font of the message.
        ShowMessage('Pos['+IntToStr(LCharPos)+'] "'+
                    ConstructionName[i][LCharPos]+'" <> "'+
                    DerobModel.HouseProperties.StringValue['NWall'][LCharPos]+'"');
      end;
    end;
  end;
end;

我可以想到的唯一可能会意外地导致相同的字符串被报告为不同的是:如果它们是不同的字符串类型。例如。如果一个是WideString和另一个AnsiString,那么:

The only thing I can think of that might unexpectedly cause "same" strings to be reported as different is: if they are different string types. E.g. if one is WideString and the other AnsiString, then:


  • 必须进行一个隐式的转换来做比较。
  • 这意味着其中一个字符串将被更改。

  • 更改可能导致两个字符串看起来实际上是不同的。

  • There would have to be an implicit conversion to do the comparison.
  • And this means one of the strings would be changed.
  • The change could cause two strings that look the same to actually be different.

这篇关于if语句检查字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆