高效字符串比较算法?
记得以前看过一个帖子好像说字符串比较不知道说字符串拷贝。
大体是这样:把字符串转成了int然后比较,而且余数部分用了switch。忘记了具体实现。比较部分(for以下的代码)好像是这样写的,但是for以上部分还要先用strlen求长度,那不是效率很低?
我记得代码一定是用了switch的,但是具体怎么用起来的忘记了,有人知道吗?
bool Astrcmp(char* str1, char *str2)
{
int iLen1 = strlen(str1);
int iLen2 = strlen(str2);
if (iLen1 != iLen2)
return false;
//这以下的代码应该是这样写的,但是上面部分难道要求长度?那不是效率很低吗?
for (int i = 0; i <= iLen1; i += 4)
{
if( *(int*)&str1[i] != *(int*)&str2[i] )
return false;
}
switch (iLen1%4)
{
case 0:
return true;
case 1:
return str1[iLen1-1] == str2[iLen1-1];
case 2:
return (str1[iLen1-1] == str2[iLen1-1] && str1[iLen1-2] == str2[iLen1-2]);
case 3:
return (str1[iLen1-1] == str2[iLen1-1] && str1[iLen1-2] == str2[iLen1-2] && str1[iLen1-3] == str2[iLen1-3]);
}
}