c++ - 我的字符串比较实现是否正确?

标签 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;
}

我的想法不是逐个比较一个字符,而是将其类型转换为 int(4 字节比较)并进行异或运算以测试它们是否相等。 我的问题是,如果只比较 require(true,false) 是否正确。

最佳答案

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

代码几乎肯定会比 strcmp 慢(它通常做这样的事情 iff 指针适当对齐 - 可能循环展开几次)。

关于c++ - 我的字符串比较实现是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40673343/

相关文章:

c++ - 重叠 I/O 与阻塞和非阻塞套接字的概念有何关系?

c++ - 使用 std::addressof 时出现 GCC 7 编译错误

c++ - 查找文件中包含其本身及其反转的单词

c++ - __int64 到 CString 返回错误值 - C++ MFC

c++ - 如果类型的大小大于 X,如何实现接受类型并计算引用的类型特征?

c++ - 无法通过 get 方法编辑私有(private)变量(必须是可修改的左值)

c++ - 字符串复制说缓冲区太小,strcpy_s源问题

c++ - 动态内存寻址和释放

c++ - 涉及通用引用的过载解决方案

c++ - 如何使用指针从不同的函数访问局部变量?