c# - 列出字符串的所有排列和组合

时间:2016-02-26 15:57:04

标签: c#

如何获得字符串数组的组合和变体? 让我们说A,B,C,D 期望得到这样的东西,它能够计算出甚至AB和BA视图作为不同的组合。

A
AB
AC
ABC
ABCD
ACBD
...

B
BA
BC
BCD
BADC
...

修改

目前我尝试的是下面的代码,使用List,我想我是否应该为我的字符串设置另一个排列(如set= abcd,bcda,cdab.....)以获得完整列表?

    string set = "abcd";

    // Init list
    List<string> subsets = new List<string>();

    // Loop over individual elements
    for (int i = 1; i < set.Length; i++)
    {
        subsets.Add(set[i - 1].ToString());

        List<string> newSubsets = new List<string>();

        // Loop over existing subsets
        for (int j = 0; j < subsets.Count; j++)
        {
            string newSubset = subsets[j] + set[i];
            newSubsets.Add(newSubset);
        }

        subsets.AddRange(newSubsets);
    }

    // Add in the last element
    subsets.Add(set[set.Length - 1].ToString());
    subsets.Sort();

1 个答案:

答案 0 :(得分:0)

由于我发现很难理解你的问题,我为有限的回答道歉。不过我会试一试。我试图在C中创建一个程序,它将显示一个类似于字符串的字符数组的组合,只是没有&#39; \ 0&#39;。我将尝试将我的代码转换为C#。

/* String for combos to be enumerated */
char[] set = { 'a', 'b', 'c', 'd' };
/* Length of the array */
int setLength = set.Length, a, b, c;

/* This will print all combos that have 1 value. E.g. A, B, C, D */
for (a = 0; a < setLength; a++) 
{
    Console.WriteLine(set[a] + Environment.NewLine);
}

/* This will give the 1st value of the combo */
for (a = 0; a < setLength; a++)
{
    /* This will give the 2nd value. Resulting in combos with a length of 2 */
    for (b = 0; b < setLength; b++)         
    {
        Console.WriteLine(set[a] + set[b] + Environment.NewLine);
    }
}

/* 1st value */
for (a = 0; a < setLength; a++)
{
    /* 2nd value */
    for (b = 0; b < setLength; b++)
    {
        /* 3rd value */
        for (c = 0; c < setLength; c++)
        {
            Console.WriteLine(set[a] + set[b] + set[c] + Environment.NewLine);
        }
    }
}
/* To continue with longer combos simply add more and more for loops */

输出: Output will be different as I changed it to fit in a single screenshot

输出会有所不同,因为我将其更改为适合单个屏幕截图 我希望这会有所帮助。

编辑:我发现了一个类似的问题已经回答:Listing permutations of different combination of characters请仔细阅读,因为它涵盖了这个问题中非常相似的主题。