lstrcmp 區分大小寫,lstrcmpi 不區分。返回值:-1(小於)、0(相等)、1(大於)。與 Delphi CompareStr/CompareText 及 StrComp 系列行為不同。
const Msgs: array[-1..1] of Char = ('<', '=', '>');
procedure TForm1.Button1Click(Sender: TObject); {'A' vs 'B'}
var p1, p2: PChar; n: Integer;
begin
p1 := 'A'; p2 := 'B';
n := lstrcmp(p1, p2); ShowMessageFmt('%s %s %s', [p1, Msgs[n], p2]); {A < B}
n := lstrcmpi(p1, p2); ShowMessageFmt('%s %s %s', [p1, Msgs[n], p2]); {A < B}
end;
procedure TForm1.Button2Click(Sender: TObject); {'A' vs 'a'}
var p1, p2: PChar; n: Integer;
begin
p1 := 'A'; p2 := 'a';
n := lstrcmp(p1, p2); ShowMessageFmt('%s %s %s', [p1, Msgs[n], p2]); {A > a}
n := lstrcmpi(p1, p2); ShowMessageFmt('%s %s %s', [p1, Msgs[n], p2]); {A = a}
end;
procedure TForm1.Button3Click(Sender: TObject); {'ABC' vs 'abcd'}
var p1, p2: PChar; n: Integer;
begin
p1 := 'ABC'; p2 := 'abcd';
n := lstrcmp(p1, p2); ShowMessageFmt('%s %s %s', [p1, Msgs[n], p2]); {ABC < abcd}
n := lstrcmpi(p1, p2); ShowMessageFmt('%s %s %s', [p1, Msgs[n], p2]); {ABC < abcd}
end;
procedure TForm1.Button4Click(Sender: TObject); {CompareStr/CompareText}
var p1, p2: PChar; n: Integer;
begin
p1 := 'A'; p2 := 'a';
n := CompareStr(p1, p2); ShowMessage(IntToStr(n)); {-32}
n := CompareText(p1, p2); ShowMessage(IntToStr(n)); {0}
end;
procedure TForm1.Button5Click(Sender: TObject); {StrComp 系列}
var p1, p2: PChar; n: Integer;
begin
p1 := 'A'; p2 := 'a';
n := StrComp(p1, p2); ShowMessage(IntToStr(n)); {-32}
n := StrIComp(p1, p2); ShowMessage(IntToStr(n)); {0}
n := StrLComp(p1, p2, 1); ShowMessage(IntToStr(n)); {-32}
n := StrLIComp(p1, p2, 1);ShowMessage(IntToStr(n)); {0}
end;
差異總結: WinAPI lstrcmp/i 返回 -1/0/1;Delphi CompareStr 返回 ASCII 碼差值;StrComp 行為類似 CompareStr。