有没有办法在C++中实现 Python 的 join()?

Is there a way to implement Python's join() in C++?

本文关键字:join Python 实现 C++ 有没有      更新时间:2023-10-16

我正在尝试将密码管理器中的某些功能移植到C 中,但是我想将其移植到C 等效的情况下。我希望至少实现与C

的这2行代码接近
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;
}

您可以创建一个函数 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以外的其他容器,这只是一个例子。

我希望它对您有帮助。