我有两个不同长度的c ++字符串。
string str1 = "01001110 01100001 01101101 01100101"
string str2 = "00000000 00000000 00000011"
我需要对str1
和str2
进行异或运算并将结果存储在新字符串中
string xor_string = str1 ^ str2
因此,可以xor
两个不同长度的字符串,并将其存储到另一个字符串中吗?
我已经搜索了,但是没有得到。
谁能告诉我该怎么做?
答案 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'
?这个您需要自己回答。