对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]的操作时,遇到了无法识别的运算符^的错误。
基于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
相关文章:
- 两个字符串在 c++ 中不相等
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 比较两个字符串后卡在无限循环中
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 如何将两个字符串加在一起,就好像它们是变量一样?
- 我需要帮助在一个类中输入两个字符串并获取其输出
- 这两个C++语句连接字符串有什么区别?
- 两个字符串之间的数学运算
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 如何在 main 函数中输出两个新字符串C++?
- sscanf() 有两个字符串参数
- 我的字符串数组一次打印出前两个字符串
- 两个 c++ 字符串上的异或
- 函数返回两个字符串的第一个常用字符
- 目标是找到两个 c 字符串之间的公共前缀(必须使用特定的函数标头)