现在,我正在开发一个需要顺序文本密钥生成的项目。我需要使用与某个键对应的整数为键生成器播种,构造函数将其转换为键。
我的键生成器重载了增量运算符,因此字符串直接递增,而不是我之前所做的,即递增索引值,然后将索引转换为我想要生成的每个键的键。
我的问题是我在生成密钥时要使用的字符集有限。我必须在键中找到要递增的字符,找出它在我的字符集中的位置,找到集合中的下一个字符,然后用集合中的下一个字符替换键中的字符。
这是我的代码:
// Not the full charset
std::string charset = "abcdefghijklmnopqrstuvwxyz0123456789";
std::string key;
key.push_back(charset[0]);
for(unsigned int place = 0; place < key.length(); place++)
{
if(key[place] == charset[charset.length() - 1])
{
// Overflow, reset char at place
key[place] = charset[0];
if((key.length() - 1) < (place + 1))
{
// Carry, no space, insert char
key.insert(key.begin(), charset[0]);
break;
}
else
{
// Space available, increment next char
continue;
}
}
else
{
// Increment char at place
key[place] = charset[charset.find(key[place]) + 1];
break;
}
}
在分析中,我发现搜索操作确实减慢了速度。有没有更快的方法来做到这一点?我想从字符集创建一个链接列表,但在我这样做之前,我想对此进行一些输入。