增加字符串中的单个字符

maf*_*ffo 0 c++ string

我不知道我是否有正确的倾斜,所以如果我错了请纠正我,我会改变我的头衔.

我有一个字符串,对于这个例子,我将使用:

"8ce4b16b"
Run Code Online (Sandbox Code Playgroud)

我想将位(我认为)沿1移位,因此字符串将是:

"9df5c27c"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑:

你知道,这些字符串是十六进制的.所以它永远不会到达z.我想做的就是在数字上加一个数字,然后在字母表中一步一步,这样a-> b,f-> gct等

如果数字是9,则会有条件将其保持为9.

输出不需要是十六进制.

字符串也只是一个例子.它是MD5加密的一部分.

Joh*_*web 6

变换一个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.