对0和1的两个字符串进行异或运算

XOR of two strings of 0s and 1s

本文关键字:字符串 两个 运算      更新时间:2023-10-16

我有两个字符串数组,其中的字符串只包含0和1。我必须对数组的元素进行异或,也就是说,我必须对两个字符串进行异或并将结果存储在第三个数组中。我应该如何继续?

示例。字符串A[]、B[]、C[]

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

我必须对字符串的各个元素进行异或,从而对两个字符串进行异或吗?或者有一种方法可以直接对它们进行异或?

这是我刚刚进行的一次测试的一部分。我在那里写了代码,我必须完成一个包含两个参数向量的函数。当我尝试执行类似A[I]^B[I]的操作时,遇到了无法识别的运算符^的错误。

基于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

否。不能像str1 ^ str2这样简单地对两个字符串进行XOR(^没有重载,字符串无法执行此操作)。

对字符串进行迭代,并逐步对字符进行异或运算。您甚至需要自己"在字符上实现XOR"(因为^是一个有点明智的XOR,从您的示例来看,这不是您想要的)。

你可以做一些类似c[i] = a[i]==b[i] ? '0' : '1'的事情。或者一些小把戏也会起作用,我想。。。

从您的问题来看,您似乎在数据类型上犯了错误。如果你写

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

你让我明白了,A不是一个比特数组。因此,不能应用运算符^。

我会将它们转换为位集。假设你想计算第一个集合与第二个的异或

   #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