我正在尝试将密码管理器中的某些功能移植到c ++中,但是我希望将它的这行python移植到等效的c ++中。我希望至少将这两行代码实现为c ++
t = string.ascii_lowercase + string.ascii_uppercase + string.digits + string.punctuation
key = ''.join([secrets.choice(t) for _ in range(20)])
#include "common.h"
#include <iostream>
std::string Common::ascii_lowercase() {
std::string ascii_lowercase;
for (char c = 97; c <= 122; c++)
ascii_lowercase += c;
return ascii_lowercase;
}
std::string Common::ascii_uppercase() {
std::string result;
for (char c = 65; c <= 90; c++)
result += c;
return result;
}
std::string Common::digits(){
std::string digits;
for (int i = 0; i <= 9; i++) {
digits += std::to_string(i);
}
return digits;
}
std::string Common::punctuation() {
std::string punctuation;
for (int i = 33; i <= 47; i++)
punctuation += i;
for (int j = 58; j <= 64; j++)
punctuation += j;
for (int z = 91; z <= 96; z++)
punctuation += z;
return punctuation;
}
答案 0 :(得分:1)
您可以创建一个函数join()
,该函数将获取您要使用的序列和分隔符,并返回与python方法相同的结果。
示例:
std::string join(const std::vector<std::string> & sequence, const std::string & separator)
{
std::string result;
for(size_t i = 0; i < sequence.size(); ++i)
result += sequence[i] + ((i != sequence.size()-1) ? separator : "");
return result;
}
您可以按以下方式使用它:
std::vector<std::string> seq {"One", "Two", "Three", "Four"};
std::cout << join(seq, "--") << std::endl;
输出将是:
一二三三四
当然,您可以使用std::vector
以外的其他容器,这只是一个示例。
希望它能对您有所帮助。