0

私は自分のコンピューターで次のことを実行しようとしていますが、実行できません。たとえば、人の名前があり、その人の名前の文字のさまざまな組み合わせを作成したいとします。

NAME ABC
                                       ABC
                                 /      |      \
                               A        B        C
                              /|\     / | \     /| \
                            AA AB AC BA BB BC CA CB CC 
                             .           .        .
                             .           .        .

たとえば、上記の名前の組み合わせを作成したい:

ABC A B C AA AB AC BA BB BC CA CB CC.... AAA... BBB... CCC...

C++でこれを行うにはどうすればよいですか?

私はそれのために次のコードを書きました:

 string c = "ABC";
 for (i = 0; i < c.length(); i++)
     c.at(i);

しかし、それは生成しただけA, B, Cです。を生成するにはどうすればよいAB, AA, AC, ...ですか?

4

2 に答える 2

2

素敵な再帰テンプレートを含むソリューションは次のとおりです。

#include <iostream>
#include <string>

template <int Depth>
void print_combinations(const std::string& name, const std::string& prefix = "")
{
    for (int i=0; i < name.size(); i++) {
        std::cout << prefix << name[i] << " ";
        print_combinations<Depth - 1>(name, prefix + name[i]);
    }
}

template <>
void print_combinations<0>(const std::string&, const std::string&)
{
}

int main()
{
    std::string name = "ABC";

    print_combinations<4>(name);
}

(上記Depth=4のように)の場合、印刷されます

A AA AAA AAAA AAAB AAAC AAB AABB AABC AAC AACA AACB AACC AB ABA ABAA ABAB ABAC ABB ABBA ABBB ABBC ABC ABCA ABCB ABCC AC ACA ACAA ACAB ACAC ACB ACBA ACBB ACBC ACC ACCA ACCB ACCC B BA BAA BAAA BAAB BAAC BAB BABA BABB BABC BAC BACA BACB BACC BB BBA BBAA BBAB BBAC BBB BBBA BBBB BBBC BBC BBCA BBCB BBCC BC BCA BCAA BCAB BCAC BCB BCBA BCBB BCBC BCC BCCA BCCB BCCC C CA CAA CAAA CAAB CAAC CAB CABA CABB CABC CACA CACB CACC CB CBA CBAA CBAB CBAC CBB CBBA CBBB CBBC CBC CBCA CBCB CBCC CC CCA CCAA CCAB CCAC CCB CCBA CCBB CCBC CCC CCCA CCCB CCCC

于 2013-11-01T05:59:58.237 に答える