-1

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

4

2 回答 2

7

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

const char *s1, *s2;

是要比较的字符串。

int i;
i = strcmp( s1, s2 );

给出比较的结果。i如果字符串相同,则为零。i如果 string 大于 string则为正,如果 strings1大于 string则为s2负。“大于”和“小于”的比较是按照 ASCII 排序顺序进行的。s2s1

strcmp()将字符串s1与字符串进行比较s2。两个字符串都必须以通常的 '\0'字符结尾。


strncmp()

const char *s1, *s2;

是要比较的字符串。

size_t N;

给出要检查的字符数.

int i;
i = strncmp( s1, s2, N );

给出比较的结果。如果字符串i的第一个字符相同,则为零。如果字符串“s1”大于字符串,则为正,如果字符串“s2”大于字符串,则为负。“大于”和“小于”的比较是按照 ASCII 排序顺序进行的。Nis2s1

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


memcmp()
const void *s1, *s2;

是要比较的字符串。大小_t N;

给出要检查的字符数.

int i;
i = memcmp( s1, s2, N );

给出比较的结果。如果字符串i的第一个字符相同,则为零。如果 string "s1" 大于 string 则为正数,如果 string大于string则为负数。“大于”和“小于”的比较是按照 ASCII 排序顺序进行的。Nis2s2s1

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

与 function 不同strncmp()memcmp()它不检查'\0'任何一个终止字符串。因此它会检查一个完整的N字符,即使字符串实际上并没有那么长。


wmemcmp()
int wmemcmp(const wchar_t *a1, const wchar_t *a2, size_t size);

该函数wmemcmp()比较从 a1 开始的尺寸宽字符和从 a2 开始的尺寸宽字符。返回的值小于还是大于零取决于第一个不同的宽字符是 a1 是小于还是大于 a2 中的相应字符。

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

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


wcscmp()
int wcscmp(const wchar_t *ws1, const wchar_t *ws2);

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)

此函数类似于wcscmp(),只是忽略大小写的差异。大写和小写字符的关联方式由当前选择的语言环境决定。在标准的“C”语言环境中,字符 Ä 和 ä 不匹配,但在将这些字符视为它们匹配的字母的一部分的语言环境中。


strcmpi()

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

strcmpi()比较string1并且string2不区分大小写。在比较之前,两个参数 string1 和 string2 中的所有字母字符都转换为小写

该函数对以空结尾的字符串进行操作。该函数的字符串参数应包含一个空字符,用于'\0'标记字符串的结尾。

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

小于 0string1小于string2

0string1相当于 string2

大于 0string1大于string2


strcasecmp()
int strcasecmp(const char *s1, const char *s2);

此函数类似于strcmp(),只是忽略大小写的差异。大写和小写字符的关联方式由当前选择的语言环境决定。在标准的“C”语言环境中,字符 Ä 和 ä 不匹配,但在将这些字符视为它们匹配的字母的一部分的语言环境中。


strncasecmp()
int strncasecmp(const char *s1, const char *s2, size_t n);

此函数类似于strncmp(),只是忽略大小写的差异。就像strcasecmp(),它取决于语言环境,大写和小写字符的关系如何。


哪种方法最好当然取决于您的要求。

于 2012-04-17T01:15:35.117 回答
5

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

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

它将返回一个数字:

  • 如果为 0,那么它们是相同的。
  • 如果它大于 0,则字符串一按字母顺序大于第二个。
  • 如果它小于 0,则字符串一按字母顺序小于第二个。
于 2012-04-17T00:18:39.683 回答