gpt4 book ai didi

c++ - 在 C++ 字符串上使用标准转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:56 25 4
gpt4 key购买 nike

我正在尝试使用 std::transform 来解密一个简单的凯撒密码,从而获得一些练习。但显然我的函数定义是错误的,因为编译器认为一元函数参数无效。这是我的代码:

char CryptoModule::UndoCaesar(char& letter)
{
return (letter - atoi(key_.c_str()) % 128);
}

void CryptoModule::DecryptCaesar()
{
std::transform(data_.begin(), data_.end(), data_.begin(), UndoCaesar);
}

谁能告诉我错误在哪里?另外,我需要修改什么才能使用 for_each ?我相信这将涉及将返回值更改为 void 并将结果存储在字母中。

谢谢,祝你有愉快的一天

编辑:尝试添加绑定(bind),但仍然无法正常工作。当前通话是:

std::transform(data_.begin(), data_.end(), data_.begin(), bind(&UndoCaesar, this, std::placeholders::_1));

最佳答案

您给定的成员函数有一个隐藏的 this参数,因此您需要绑定(bind)它才能传递它:

std::transform(data_.begin(), data_.end(), data_.begin(), 
std::bind(&CryptoModule::UndoCaesar, this, std::placeholders::_1)
);

请注意 std::bind <functional> .所有这一切基本上都是因为 std::transform调用任何类似函数的对象,f , 它需要 f(currentElement)然后依次调用 UndoCaesar(this, currentElement)this成为其状态的一部分,因为您绑定(bind)了它。

或者,您可以将调用包装在捕获 this 的 lambda 中以便它可以用于成员函数调用(隐式地,像正常情况一样):

std::transform(data_.begin(), data_.end(), data_.begin(), 
[this](char c) {return UndoCaesar(c);}
);

关于c++ - 在 C++ 字符串上使用标准转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21965507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com