我决定找到两个函数的速度:
- strcmp - 在string.h中定义的标准比较函数
- xstrcmp- 一个与参数相同、功能相同,只是由我创建的函数。
以下是我的xstrcmp函数:
int xstrlen(char *str)
{
int i;
for(i=0;;i++)
{
if(str[i]=='\0')
break;
}
return i;
}
int xstrcmp(char *str1, char *str2)
{
int i, k;
if(xstrlen(str1)!=xstrlen(str2))
return -1;
k=xstrlen(str1)-1;
for(i=0;i<=k;i++)
{
if(str1[i]!=str2[i])
return -1;
}
return 0;
}
我不想依赖于strlen,因为我希望所有东西都是用户定义的。
所以,我找到了结果。strcmp每毫秒进行364次比较,而我的xstrcmp每毫秒只进行20次比较(至少在我的电脑上!)
有人能告诉我这是为什么吗?xstrcmp函数如何使自己如此快速?
strlen()
调用,它们的时间复杂度是O(n)。strcmp()
不应该需要任何strlen()
调用。 - FatalErrorstrcmp
和strcpy
进行手动优化,产生非常紧凑的内联代码。 - Hot Licks