gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:56 25 4
gpt4 key购买 nike

我正在使用 SAP Idocs,其中包含可以包含成本中心引用范围的段。范围以字符串形式作为起始值和结束值给出。为了将这些值存储在我的数据库中,我需要生成这些值之间存在的所有可能组合。

字符串是字母数字,例如开始:D98C1 和结束:D9AZ3。单个字符序列首先是从 0 到 9 的数字,然后是从 A 到 Z 的字母。扩展需要生成开始和结束之间所有可能的组合,比如开始:A1 到结束: CA 将包含值 A1A9AAAZB0B9BABZC0C9CA

我完全坚持这一点,非常感谢关于如何实现的一些指示。

编辑:

作为一个人,我会从找到开始和结束字符串之间不同的部分开始。我能做到,这很容易。因此对于上面的示例,这将是 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);
}
}

但它并没有提供所有的组合。

最佳答案

您正在寻找的是 base36。因为它是一个用 36 个字母表表示的数字。与数字的任何其他表示一样,您将所有表示转换为数字,进行计算,然后将它们转换回显示:

using System;
using System.Linq;

namespace ConsoleApp11
{
public static class Base36
{
private const string Digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

public static string ConvertToBase36(this int value)
{
string result = string.Empty;

while (value > 0)
{
result = Digits[value % Digits.Length] + result;
value /= Digits.Length;
}

return result;
}

public static int ConvertFromBase36(this string value)
{
return value.Reverse().Select((character, index) => (int)Math.Pow(Digits.Length, index) * Digits.IndexOf(character)).Sum();
}
}

class Program
{
static void Main()
{
var start = "D3A0";
var end = "D3AC";

var startNumber = start.ConvertFromBase36();
var endNumber = end.ConvertFromBase36();

while (startNumber < endNumber)
{
Console.WriteLine(startNumber.ConvertToBase36());
startNumber++;
}

Console.ReadLine();
}
}
}

enter image description here

关于c# - 生成两个字母数字字符串范围之间的所有可能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50250479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com