Как создать последовательность строк в C ++

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

  • 2
    Попробуйте написать алгоритм в псевдокоде, чтобы получить четкое представление о том, как вы планируете сначала его решить. Затем вы можете перевести его на C.
  • 1
    А как насчет CBA, BAC, etc. ? Или вы просто хотели двухбуквенные комбинации? Хорошей новостью является то, что код, который у вас есть, является строительным блоком для остальной части алгоритма. Вам определенно нужно написать какой-нибудь псевдокод или даже нарисовать на бумаге то, что, по вашему мнению, должно произойти.
Показать ещё 4 комментария
Теги:

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 AABA AABB AABC AAC AACA AACB AACC AB ABA ABAA ABAB ABAC ABB ABBA ABBB ABBC ABC ABC 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 BBBC BC BC BCA BCAA BCAB BCAC BCB BCBA BCBB BCBC BCC BCCA BCCB BCCC C CA 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

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(int k=0;k<n;k++) и внутри цикла for cout<<c[i]<<c[j]<<c[k]<<" "

  • 0
    Вы правы, но я хочу, чтобы это было так, как если бы я выбрал 3 комбинации или 4 комбинации, то есть AAA, AAB, AAC или AAAA AAAB AAAC и т. д., чтобы сохранить его в строке

Ещё вопросы

Сообщество Overcoder
Наверх
Меню