我在C++中练习字符串操作,发现了这个示例,该示例查找2个字符串之间的差异并返回该字符。这是代码。

#include <iostream>

char find_difference(const std::string& s, const std::string& t)
{
    std::string r = s + t;
    char ch = 0;
    for (char c : r) {
        ch ^= c;
    }
    return ch;
}

他们在这里使用XOR,这在理论上是有意义的,但是我对实现有些困惑。首先,这是什么意思?
char ch = 0;

我知道“^ =”表示XOR,但是如何使用char ch = 0遍历字符串,得出准确的结果?

最佳答案

您所拥有的此实现仅在存在单个不同字符的情况下才有效,否则两个字符串都完全相同。它基于两个字符串都相同但一个字符的假设,因此,如果您将任何字符与其自身进行异或运算,您将得到0(零),因此它们对所有字符进行异或运算,相同的字符会相互抵消,而剩下的唯一结果将是一个字符串中的不同字符与另一字符串中的不同字符之间的XOR。

它甚至可能不是可打印的字符,例如'a'^'b'将给您'\ x01',依此类推。所以我不太明白为什么有人会写这个愚蠢的代码以及它可以用于什么目的。

还有什么... XOR操作并不关心顺序。如果您有字符串“abc”和“cab”,则此函数不会有任何区别。

关于c++ - 使用XOR在C++中char = 0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58036865/

10-14 09:32