两串 0 和 1 的异或

XOR of two strings of 0s and 1s

我有两个字符串数组,其中的字符串仅包含 0 和 1。我必须对数组的元素进行异或运算,我必须对两个字符串进行异或运算并将结果存储在第三个数组中。我该如何进行?

例子。字符串 A[],B[],C[]

A[] = {'101','100'} ,B[] = {'110'} 所以输出应该是数组 C[] = {'011','010'}

我是否必须对字符串的各个元素进行异或,从而对两个字符串进行异或,或者有办法直接对它们进行异或吗?

这是我刚刚进行的测试的一部分。我在那里写了代码,我必须完成一个包含两个参数向量的函数。当我尝试执行类似 A[i]^B[i].

的操作时,出现无法识别的运算符错误 ^

没有。您不能像这样 str1 ^ str2 简单地对两个字符串进行异或操作(^ 对于字符串而言,执行此操作不会超载)。

逐步遍历字符串并对字符进行异或运算。您甚至需要 'implement the XOR on chars' 自己(因为 ^ 是按位异或,从您的示例判断这不是您想要的)。

你可以做类似 c[i] = a[i]==b[i] ? '0' : '1' 的事情。或者我想某种小摆弄也会起作用......

从你的问题来看,你的数据类型似乎有误。 如果你写

A[] = {'101','100'}

你让我明白了 A, 不是位数组。因此,无法应用运算符 ^。

基于 GingerPlusPlus 的评论,您可以使用以下方法对两个等长的字符串 0 和 1 进行异或运算:

std::string xor_str( const std::string& a, const std::string& b )
{
    std::string c( a.size(), '0' );
    std::transform( a.begin(), a.end(), b.begin(), c.begin(),
            [] ( char x, char y ) { return x ^ y ^ '0'; } );
    return c;
}

并使用以下方式调用:

std::cout << xor_str("0101", "0110") << std::endl;

输出:

0011

我会将它们转换为位集。 假设你想用第二个

计算第一个集合的异或
   #include <bitset>
#include <string>
#include <vector>
#include <iostream>

int main(void)
{
  const size_t numbits = 3;

  std::vector<std::bitset<numbits>> b1;
  std::vector<std::bitset<numbits>> b2;

  std::bitset<numbits> b11 (std::string("101"));
  std::bitset<numbits> b12 (std::string("100"));

  b1.push_back(b11);
  b1.push_back(b12);

  std::bitset<numbits> b21 (std::string("110"));

  b2.push_back(b21);

  std::vector<std::bitset<numbits>> res;

  res.reserve(b1.size()*b2.size());

  std::bitset<numbits> xorres;

  for(size_t i = 0; i < b1.size(); i++)
    {
      for(size_t j = 0; j < b2.size(); j++)
    {
      xorres = (b1[i]^= b2[j]);
      res.push_back(xorres);
    }

    }


  for(size_t k = 0; k < res.size(); k++)
    {
      std::cout << "RES N" << k <<" " << res[k] << std::endl;
    }


}

生成结果

RES N0 011
RES N1 010