【问题标题】:C++: String FunctionsC++:字符串函数
【发布时间】:2014-12-13 04:29:18
【问题描述】:

我对 C++ 编程很陌生,并且通过阅读书籍来了解基础知识。 我遇到了两个有趣的函数strcmpi()stricmp()。 我知道这两个函数都通过忽略字符串的大小写来按字典顺序比较字符串。 所以我只是想知道它们之间的区别。

我们将不胜感激。

【问题讨论】:

  • 字符串按它们的 ascii 表值排序,从最左边(第一个)字符开始,逐渐向下移动。如果一个字符串在另一个字符串之前终止(并且它们在其他方面相同),则较短的字符串是第一个。 (又名:“asdf”小于“asdfQ”。)benborowiec.com/wp-content/uploads/2011/07/…
  • @user2899162 这与我的问题无关
  • @user2899162 我在问为什么有两个不同的函数来做同样的事情
  • 哇,我完全误读了。我正在查看朋友的问题,并阅读了您的问题,并给了您错误的答案……我将把我的愚蠢作为评论。我的错! strcmp 是区分大小写的,就像在C 中一样,但是strcmpi 中的i 表示不区分大小写——就像在中一样,它不区分大小写。 (不过,我认为它不是 C 标准的一部分。)

标签: c++ string


【解决方案1】:

这两个函数的作用完全相同(只要您坚持比较纯 ASCII 字符串)。

问题是,ANSI C 标准都不是其中的一部分,因此您不能确定任何这些都可用于给定的编译器。

您可以为相同的功能使用其他名称。例如_strcmpi()

C/C++ 中没有标准的不区分大小写的比较原语,因此每个编译器都提供了自己的版本,名称各不相同。

最好的“标准”变体是 ISO C++ _stricmp,但我敢打赌目前地球上的每个编译器都支持它。

其背后的原因是区分大小写并不像看起来那么微不足道,各种语言的所有变音符号和扩展的字符编码都是如此。

虽然纯 ASCII 字符串总是以相同的方式进行比较,但在尝试比较 UTF16 字符串或其他扩展字符集时,您可能会发现实现上的差异。

this article 来看,一些 C++ 极客似乎也很喜欢重写他们自己的版本。

【讨论】:

    【解决方案2】:

    strcmpi 和 stricmp 是不区分大小写的 strcmp 版本。它们在所有其他方面的工作方式相同。 _strcmpi 和 _stricmp 是 strcmpi 和 stricmp 的替代名称。 strcasecmp 是 strcmpi 的别名。

    int strcmp(const char *string1, const char *string2);

    int strcmpi(const char *string1, const char *string2);

    int stricmp (const char *string1, const char *string2);

    【讨论】:

    • strcmpi 不是有效的 POSIX 函数
    • 是的。 strcmpi 已弃用 POSIX 函数。请改用符合 ISO C++ 标准的 _stricmp。
    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 2012-04-23
    • 2012-07-16
    • 2011-07-14
    • 2013-12-22
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多