函数问题在c ++中生成字母组合

时间:2013-07-11 02:04:19

标签: c++

我正在尝试创建一个函数,它将输出所有可能的字母组合,与辅音和元音交替。它应输出:

辅音+元音+辅音+元音+辅音+元音 - 或 - 巴巴巴......

我有前两个字母输出正确,但我坚持添加更多。我的问题是在下面的内容之后放置for循环。

我现在只是在控制台上进行测试(用于测试),但是一旦它正在工作,我将把它输出到一个文件中供以后参考。

void createWord(char consonants[], char vowels[])
{
//CLENGTH = 21, and VLENGTH = 5, with consonants[] as a cstring with all
consonants, and vowels[] as a cstring with all vowels.

int i, j;
for (i = 0; i < CLENGTH; i++)
{

    for (j = 0; j<VLENGTH; j++)
    {
        cout << consonants[i] << vowels[j] ;
        cout << endl;
    }
}

}

1 个答案:

答案 0 :(得分:1)

就像几乎令人惊讶的“生成所有组合”类型的问题一样,这可以通过计算来解决。

从几个字符串开始,从数字转换为字符表示:

char const *consonants[] = "bcdfghjklmnpqrstvwxyz";
char const *vowels[] = "aeiou";

我们可以算一下,并使用数字的正确部分作为数组的索引:

// I'll arbitrarily pick 10000 as the number to print out.
for (size_t i=0; i<10000; i++) {
    size_t digit_0 = i % 21;
    i /= 21;
    size_t digit_1 = i % 5;
    i /= 5;
    size_t digit_2 = i % 21;
    i /= 21;
    size_t digit_3 = i % 5;

    std::cout << consonants[digit_0] 
              << vowels[digit_1] 
              << consonants[digit_2] 
              << vowels[digit_3] 
              << "\n";
}