为了账号安全,请及时绑定邮箱和手机立即绑定

在两个字母数字字符串范围之间生成所有可能的组合

在两个字母数字字符串范围之间生成所有可能的组合

C#
呼啦一阵风 2021-06-02 09:44:59
我正在使用 SAP Idocs,其中包含可以包含成本中心参考范围的段。范围作为字符串的起始值和结束值给出。要将这些值存储在我的数据库中,我需要生成这些值之间存在的所有可能组合。字符串是字母数字,比如 start:D98C1和 end: D9AZ3。单个字符序列首先是从 0 到 9 的数字,然后是从 A 到 Z 的字母。扩展需要在开始和结束之间生成所有可能的组合,例如 start: A1to end:CA将包含值A1to A9, AAto AZ, B0to B9, BAto BZ,C0到C9和CA。我完全坚持这一点,并且非常感谢有关如何实现这一点的一些指示。编辑:作为一个人,我会首先找到开始和结束字符串之间不同的部分。我可以做到,这很容易。所以对于上面的例子,那就是D9. 然后,我将一次一个字符遍历起始字符串的可变部分,并从字符串的末尾更改所有字符,遍历所有可能的字符,直到到达结束字符串中的相应字符。我只是坚持实施。我从这样的事情开始:readonly static char[] values = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToArray();     static void Main(string[] args)    {        string from = "D3A0";        string to = "D3AC";        string root = new string(from.TakeWhile((c, i) => to.Length >= i && to[i] == c).ToArray());        string from1 = from.Substring(root.Length);        string to1 = to.Substring(root.Length);        var output = new List<string>();        for (int i = from1.Length - 1; i == 0; i--)        {            char startChar = from1[i];            char endChar = to1[i];            var remainingValues = values.SkipWhile(v => v != startChar)                                        .TakeWhile(v => v != endChar)                                        .ToList();            foreach (char v in remainingValues)            {                string currentValue = from1.Remove(i) + v;                output.Add(currentValue);            }            if (output.Contains(to1))            {                break;            }        }        foreach (var s in output.Select(o => root + o))        {            Console.WriteLine(s);        }    }但它不提供所有组合。
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信