在两个C ++字符串上进行异或

时间:2018-08-24 11:47:30

标签: c++ xor

我有两个不同长度的c ++字符串。

string str1 = "01001110 01100001 01101101 01100101"

string str2 = "00000000 00000000 00000011"

我需要对str1str2进行异或运算并将结果存储在新字符串中

string xor_string =  str1 ^ str2

因此,可以xor两个不同长度的字符串,并将其存储到另一个字符串中吗?

我已经搜索了,但是没有得到。

谁能告诉我该怎么做?

2 个答案:

答案 0 :(得分:3)

类似这样的东西:

#include <string>
#include <iostream>
#include <bitset>
#include <algorithm>

std::bitset<32> to_bitset(std::string s)
{
    auto binary = [](char c) { return c == '0' || c == '1'; };
    auto not_binary = [binary](char c) { return !binary(c); };

    s.erase(std::remove_if(begin(s), end(s), not_binary), end(s));

    return std::bitset<32>(s);
}

std::string to_string(std::bitset<32> bs)
{
    return bs.to_string();
}

int main()
{
    std::string str1 = "01001110 01100001 01101101 01100101";
    std::string str2 = "00000000 00000000 00000011";

    auto result = to_string(to_bitset(str1) ^ to_bitset(str2));

    std::cout << result << std::endl;
}

预期输出:

01001110011000010110110101100110

答案 1 :(得分:1)

您总是可以遍历或遍历字符串,然后将结果放入新字符串中。

std::string str1 = "01001110 01100001 01101101 01100101";
std::string str2 = "00000000 00000000 00000011";
//...  
std::string result;
const char c = ((str1[i] - '0') ^ (str2[i] - '0')) + '0';
result += c;

基本问题是,您需要制作长度相等的字符串或更改算法以处理长度不同的字符串。

例如,您是在str2较长时重复str1还是在str2前面加上'0'?这个需要自己回答。