#include <iostream>
using namespace std;
bool isEqual(const char *a,const char *b)
{
int lengthA=strlen(a);
int lengthB=strlen(b);
if( lengthA != lengthB)
{
return false;
}
int intLength=sizeof(int);
int *ptrA;
int *ptrB;
int i=0;
for(;i<lengthA/intLength;i++)
{
ptrA=(int*)(a+(i*intLength));
ptrB=(int*)(b+(i*intLength));
if(( (*ptrA) ^ (*ptrB) ))
{
return false;
}
}
i=lengthA-lengthA%intLength+1;
for(;i<lengthA;i++)
{
if(a[i] != b[i])
{
return false;
}
}
return true;
}
int main()
{
cout<<isEqual("asasa","asasa")<<endl;
return 0;
}
我的想法是不比较char by char,而是将它转换为int(4字节比较)并执行xor操作以测试它们是否相等。 我的问题是,如果只需要比较(真,假)是正确的。
答案 0 :(得分:1)
该代码很丑,不可能比简单的循环更快,但在int
没有对齐要求的平台上,我没有看到任何原因导致它无法正常工作的原因。在那些它做的事情上,你会邀请有趣的行为......
对于生产代码,这将无法在几个方面进行审核。最重要的是,太聪明了一半,你需要证明它在任何方面都胜过strcmp
。我真的怀疑它会。
答案 1 :(得分:1)
这是未定义的行为。 (您正在取消引用指向int
的指针,其中指向的对象不是int。)
代码几乎肯定会比strcmp慢(这通常会像这样做 iff 指针被适当地对齐 - 可能与循环展开了几次)。