我不知道我是否有正确的倾斜,所以如果我错了请纠正我,我会改变我的头衔.
我有一个字符串,对于这个例子,我将使用:
"8ce4b16b"
Run Code Online (Sandbox Code Playgroud)
我想将位(我认为)沿1移位,因此字符串将是:
"9df5c27c"
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:
你知道,这些字符串是十六进制的.所以它永远不会到达z.我想做的就是在数字上加一个数字,然后在字母表中一步一步,这样a-> b,f-> gct等
如果数字是9,则会有条件将其保持为9.
输出不需要是十六进制.
字符串也只是一个例子.它是MD5加密的一部分.
变换一个string?这听起来像是一份工作std::transform():
#include <cassert>
#include <string>
char increment(char c)
{
if ('9' == c)
{
return '9';
}
return ++c;
}
std::string increment_string(const std::string& in)
{
std::string out;
std::transform(in.begin(), in.end(), std::back_inserter(out), increment);
return out;
}
int main()
{
assert(increment_string("8ce4b16b") == "9df5c27c");
assert(increment_string("ffffffff") == "gggggggg");
assert(increment_string("89898989") == "99999999"); // N.B: this is one of 2^8 strings that will return "99999999"
assert(increment_string("99999999") == "99999999"); // This is one more. Mapping backwards is going to be tricky!
return 1;
}
Run Code Online (Sandbox Code Playgroud)
如图所示,您可以在increment()函数中实现您希望对字符施加的任何限制.
另一方面,如果您希望将字符串视为十六进制数并添加0x11111111到其中:
#include <sstream>
#include <cassert>
int main()
{
std::istringstream iss("8ce4b16b");
long int i;
iss >> std::hex >> i;
i += 0x11111111;
std::ostringstream oss;
oss << std::hex << i;
assert(oss.str() == "9df5c27c");
return 1;
}
Run Code Online (Sandbox Code Playgroud)
在构造中没有任何位移string.
| 归档时间: |
|
| 查看次数: |
4523 次 |
| 最近记录: |