有没有一种方法可以在C ++中实现Python的join()?

时间:2019-05-17 10:51:13

标签: c++

我正在尝试将密码管理器中的某些功能移植到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;
}

1 个答案:

答案 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以外的其他容器,这只是一个示例。

希望它能对您有所帮助。