我不确定以下代码有多快。如果有人知道比这更快/更优化的代码,请告诉我。
int xstrcmp(char *s1, char *s2)
{
while (*s1 == *s2++)
if (*s1++ == 0)
return (0);
return (*(const unsigned char *)s1 - *(const unsigned char *)(s2-1));
}
答案 0 :(得分:16)
使用::strcmp
代替您自己的手动滚动版本。您的编译器供应商很可能只使用特定于汇编的版本进行比较(例如,SSE4.2具有快速字符串比较的特殊指令。)例如,MSVC版本以汇编语言编写并使用较大的比较(整个单词)而不是单个字符)尽可能特殊的套管未对齐字符串的开头/结尾(如果你安装了VS2010,它就在VC/crt/src/intel/strcmp.asm
。)
答案 1 :(得分:5)
你有没有测量过这比strcmp快多少? C strcmp应该已经很好地优化了。
您可以采取的其他一些方法:
答案 2 :(得分:3)
如果我正在测试平等,有时我写这个:
if (a[0]==b[0] && strcmp(a, b)==0){.....
所以如果第一个字符匹配,它只会调用strcmp
,大多数情况下它们都不匹配。