比较C中字符串的最快方法

And*_*v93 -2 c string comparison type-conversion

如果我有一个程序需要比较很多字符串,那么最好的方法是什么,以便运行时间最短?

Lio*_*ion 7

strcmp() - 比较两个字符串.

const char *s1, *s2;
Run Code Online (Sandbox Code Playgroud)

是要比较的字符串.

int i;
i = strcmp( s1, s2 );
Run Code Online (Sandbox Code Playgroud)

给出比较结果.i如果字符串相同则为零.i是正面的,如果串s1是不是字符串较大s2,且为负,如果字符串s2比串更大s1.根据ASCII整理顺序进行"大于"和"小于"的比较.

strcmp()将字符串s1与字符串进行比较s2.两个字符串必须以通常的' \0'字符终止.


strncmp()

const char *s1, *s2;
Run Code Online (Sandbox Code Playgroud)

是要比较的字符串.

size_t N;
Run Code Online (Sandbox Code Playgroud)

给出要检查的字符数.

int i;
i = strncmp( s1, s2, N );
Run Code Online (Sandbox Code Playgroud)

给出比较结果.i如果N字符串的第一个字符相同,则为零.i如果字符串"s1"大于字符串s2,则为正,如果字符串"s2"大于字符串,则为负s1.根据ASCII整理顺序进行"大于"和"小于"的比较.

strncmp()将字符串的前N个字符与字符串s1的第一个N字符进行比较s2.如果一个或两个字符串短于N字符(即如果strncmp()遇到' \0'),则比较将在该点停止.因此N表示要检查的最大字符数,而不是确切的数字.(注意,如果N为零,strncmp()将始终返回零 - 不检查任何字符,因此未找到差异.)


memcmp()
const void *s1, *s2;
Run Code Online (Sandbox Code Playgroud)

是要比较的字符串.size_t N;

给出要检查的字符数.

int i;
i = memcmp( s1, s2, N );
Run Code Online (Sandbox Code Playgroud)

给出比较结果.i如果N字符串的第一个字符相同,则为零.i是正的,如果字符串"S1"是不是字符串更大s2,并且是负的,如果字符串s2小于串更大s1.根据ASCII整理顺序进行"大于"和"小于"的比较.

memcmp()N字符串"s1"的前几个字符与字符串的前N个字符进行比较s2.

与函数不同strncmp(),memcmp()不检查'\0'终止任一字符串.因此它会检查一个完整的N字符,即使字符串实际上并不长.


wmemcmp()
int wmemcmp(const wchar_t *a1, const wchar_t *a2, size_t size);
Run Code Online (Sandbox Code Playgroud)

该函数wmemcmp()将从a1开始的大小宽字符与从a2开始的大小宽字符进行比较.返回的值小于或大于零,具体取决于第一个不同的宽字符a1是小于还是大于a2中的相应字符.

如果两个块的内容相等,则wmemcmp()返回0.

在任意数组上,该memcmp()函数主要用于测试相等性.对字节以外的数组进行逐字节排序比较通常没有意义.例如,对构成浮点数的字节进行逐字节比较,不太可能告诉您有关浮点数值之间关系的任何信息.


wcscmp()
int wcscmp(const wchar_t *ws1, const wchar_t *ws2);
Run Code Online (Sandbox Code Playgroud)

wcscmp函数将宽字符串ws1与ws2进行比较.返回的值小于或大于零,具体取决于第一个不同的宽字符是ws1是小于还是大于ws2中的相应字符.

如果两个字符串相等,则wcscmp()返回0.

使用的排序的结果wcscmp()是,如果ws1是初始子串ws2,则ws1被认为是"小于"ws2.

wcscmp()不考虑字符串写入的语言的排序约定.要获得那个必须使用wcscoll.


wcscasecmp()
int wcscasecmp(const wchar_t *ws1, const wchar_T *ws2)
Run Code Online (Sandbox Code Playgroud)

此功能类似wcscmp(),但忽略大小写的差异.大写和小写字符的关联方式取决于当前选定的区域设置.在标准的"C"语言环境中,字符Ä和ä不匹配,但在一个区域设置中,这些字符将这些字符视为它们匹配的字母表的一部分.


strcmpi()

int strcmpi(const char *string1, const char *string2);
Run Code Online (Sandbox Code Playgroud)

strcmpi()比较string1string2没有对大小写.在比较之前,两个参数string1和string2中的所有字母字符都将转换为小写.

该函数对空结束字符串进行操作.函数的字符串参数应包含'\0'标记字符串结尾的空字符.

strcmpi() 返回一个值,指示两个字符串之间的关系,如下所示

小于0 string1小于string2

0 string1相当于string2

大于0 string1大于string2.


strcasecmp()
int strcasecmp(const char *s1, const char *s2);
Run Code Online (Sandbox Code Playgroud)

此功能类似strcmp(),但忽略大小写的差异.大写和小写字符的关联方式取决于当前选定的区域设置.在标准的"C"语言环境中,字符Ä和ä不匹配,但在一个区域设置中,这些字符将这些字符视为它们匹配的字母表的一部分.


strncasecmp()
int strncasecmp(const char *s1, const char *s2, size_t n);
Run Code Online (Sandbox Code Playgroud)

此功能类似strncmp(),但忽略大小写的差异.比如strcasecmp(),依赖于区域设置依赖于大写和小写字符.


哪种方法最好取决于您的要求.


Kel*_*reu 5

您可以使用 strcmp( string1,string2);

如果它们是字符串数组: strcmp(string1[i], string2[j]);

它将返回一个数字:

  • 如果它是0,那么它们是相同的.
  • 如果它大于0,则字符串1按字母顺序大于第二个字符串.
  • 如果它小于0,则字符串1按字母顺序小于第二个字符串.

  • 手写的`strcmp()`替换几乎不可能更快 - 内置的将使用尽可能多的聪明技巧来比较尽可能多的字节. (3认同)
  • 什么是`strcpm`? (2认同)