如何在C ++中生成字符串序列

时间:2013-11-01 04:41:09

标签: c++

我正在尝试在我的计算机上执行以下操作,但没有让它执行,比如说我有一个人的名字,我想在他的名字中使用不同的字母组合:

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, ...

2 个答案:

答案 0 :(得分:3)

你可以这样做

string c='ABC';
int n=c.length();

for(int i=0;i<n;i++)
{
  std::cout<<c[i]<<" ";

  for(int j=0 ; j< n ;j++)
  {
      std::cout<<c[i]<<c[j]<<" ";
  }
}

输出是: A AA AB AC B BA BB BC C CA CB CC

如果你想要三个字母组合,在第二个for循环中添加第三个for循环,使用相同的端点,如

for(int k=0;k<n;k++)和for循环内部cout<<c[i]<<c[j]<<c[k]<<" "

答案 1 :(得分: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(如上所述),它会打印

   AA AAA AAAA AAAB AAAC AAB AABA AABB AABC AAC AACA AACB AACC AB ABA ABAA ABAB ABAC ABB ABBA ABBB ABBC ABC ABCA ABCB ABCC ACA ACAA ACA ACAC ACB ACBA ACBB ACBC ACCAC 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 CAA CAAA CAAB CAAC CAB CABA CABB CABC CAC 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