我的字符串比较实现是对的吗?

时间:2016-11-18 09:21:52

标签: c++

#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操作以测试它们是否相等。 我的问题是,如果只需要比较(真,假)是正确的。

2 个答案:

答案 0 :(得分:1)

该代码很丑,不可能比简单的循环更快,但在int没有对齐要求的平台上,我没有看到任何原因导致它无法正常工作的原因。在那些它做的事情上,你会邀请有趣的行为......

对于生产代码,这将无法在几个方面进行审核。最重要的是,太聪明了一半,你需要证明它在任何方面都胜过strcmp。我真的怀疑它会。

答案 1 :(得分:1)

这是未定义的行为。 (您正在取消引用指向int的指针,其中指向的对象不是int。)

代码几乎肯定会比strcmp慢(这通常会像这样做 iff 指针被适当地对齐 - 可能与循环展开了几次)。