c++ - C++:字符串和整数之间的异或
问题描述
假设我有两个向量:
std::vector<int> numbers;
std::vector<std::string> words;
我读了两个文件:一个只有数字,另一个有单词。我想用数字作为我的话的密码,因此numbers
XOR
words
会是一个ciphertext
并且ciphertext
XOR
numbers
会给我words
回馈。
我正在尝试做类似的事情
int charCount = wordsCount >= numbersCount ? numbersCount : wordsCount;
for (int i = 0; i < charCount; i++) {
result[i] = words[i] ^ numbers[i];
}
但这不起作用
no match for 'operator^' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<std::__cxx11::basic_string<char> >, std::__cxx11::basic_string<char> >::value_type' {aka 'std::__cxx11::basic_string<char>'} and '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'})|
我怎样才能以最简单的方式做到这一点?
UPD:所以我真正想要的是将单词中的每个字符与以下数字进行异或。
解决方案
如果要对单词的所有字符进行异或运算,并使用相应的数字,则需要遍历每个字符。没有办法用 .xor 对字符串的所有字符进行异或运算operator^
。
你可以这样做
std::transform(std::begin(numbers),
std::begin(numbers) + std::min(numbers.size(), words.size()),
std::begin(words),
std::begin(words),
[](auto number, auto word)
{
std::transform(std::begin(word), std::end(word),
std::begin(word),
[number](auto c)
{ return c ^ number; });
return word;
});
它是对称的,因此可用于编码和解码。
我很少建议这样做,但在这种情况下,传统的 for 循环可能更具可读性:
int min = std::min(numbers.size(), words.size());
for (int i = 0; i < min; ++i)
for (int j = 0; j < words[i].size(); ++j)
words[i][j] = words[i][j] ^ numbers[i];
推荐阅读
- c++ - 具有默认捕获类型的 c++ lambda 函数
- perl - Parallel Fork-Manager:输出中其他子进程的片段
- flutter - 在动态脚手架中显示 SnackBar 失败
- php - Laravel 5.5 \Memcache 未找到
- python - 使用 WIQL 从 Azure Devops 检索链接的工作项
- python - Docker ModuleNotFoundError:没有名为“scipy”的模块
- html - Flask静态子目录中的动态文件名加载
- python - pyspark中的枢轴数据框
- cmd - 如何运行特定的 cmd.exe 以获得所需的结果?
- android - 在本地通过nodejs服务器发布android GPS位置?