美文网首页
AnsiStrIComp - C++ Builder

AnsiStrIComp - C++ Builder

作者: 玄坴 | 来源:发表于2021-08-27 09:00 被阅读0次

C++ Builder 参考手册System::SysutilsAnsiStrIComp


比较两个字符串,使用当前的地区和语言,不区分大小写。

头文件:#include <System.SysUtils.hpp>
命名空间:System::Sysutils
函数原型:

int __fastcall AnsiStrIComp(System::WideChar * S1, System::WideChar * S2);

参数:

S1: 要比较的字符串1,System::WideChar 类型;
S2: 要比较的字符串2,System::WideChar 类型;

返回值:

0: S1==S2
>0: S1>S2
<0: S1<S2

  • 比较两个字符串,使用当前的地区和语言,不区分大小写,不限于英语,例如 "āωπ" 和 "ĀΩΠ" 是相等的;
  • 汉字比较大小,也是和地区相关的,中国大陆默认排序按照汉语拼音对应的英语字母顺序排列的,而中国的港澳台地区默认按照汉字的笔画数顺序排列的,例如:
    • 大陆:"玄" > "坴",因为按照汉语拼音 "xuan" > "lu" 这样比较的;
    • 港澳台:"玄" < "坴",因为按照汉字笔画数 5 < 8 这样比较的;
    如果读音或笔画数相等,不同的汉字也是不等的,具体怎样比较大小不在本文叙述范围之内;
  • 这个函数的执行结果和 AnsiCompareText 是相同的,区别是参数的变量类型不同;
  • 这个函数的参数都是 System::WideChar 类型的了,虽然函数名以 Ansi 开头,实际上是 UNICODE (UTF-16) 编码。参数为 char 或 AnsiString 类型的函数都移到 System.AnsiStrings.hpp 这个头文件里面了,参数为 char 或 AnsiString 类型的函数都看作过时的函数,不建议使用了;
  • 问题:使用这个函数 Borland 编译器会出现使用过时了的函数的警告 (属于误报),即使参数是 System::WideChar * (或 wchar_t *) 类型,而 clang 32 和 clang 64 编译器在使用 System::WideChar * (或 wchar_t *) 类型的参数不会有警告,如果必须使用 Borland 编译器并且很在意这个警告,可以使用 AnsiCompareText 代替。

例子:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int r = Sysutils::AnsiStrIComp(Edit1->Text.c_str(), Edit2->Text.c_str());
    if(r > 0)
        ShowMessage(Edit1->Text + L" > " + Edit2->Text);
    else if(r < 0)
        ShowMessage(Edit1->Text + L" < " + Edit2->Text);
    else
        ShowMessage(Edit1->Text + L" == " + Edit2->Text);
}

运行结果:

在不区分大小写的情况下:
"ΣωπX" 和 "σΩΠx" 相等;
"ΣωπX" 小于 "σΩΠy",因为英语字母 'x' < 'y',其他部分认为相等。

运行结果:字符串比较大小,不区分大小写 运行结果:字符串比较大小,不区分大小写

相关:


C++ Builder 参考手册System::SysutilsAnsiStrIComp

相关文章

网友评论

      本文标题:AnsiStrIComp - C++ Builder

      本文链接:https://www.haomeiwen.com/subject/cmpdahtx.html