C# c中字母数字值的自动增量#

C# c中字母数字值的自动增量#,c#,alphanumeric,base36,C#,Alphanumeric,Base36,有人能帮助我们理解以下场景的逻辑吗 **Input -> Output** 00000 --> 00001 00009 --> 0000A 0000Z --> 00010 .. .. 0002Z --> 00030 00039 --> 0003A 有什么建议吗 编辑 谢谢大家的建议。:)这就是我尝试过的,它是有效的,但不确定在某种情况下是否会断裂:/ public static void Main(string[] args) {

有人能帮助我们理解以下场景的逻辑吗

**Input -> Output**
00000 --> 00001
00009 --> 0000A
0000Z --> 00010
..
..
0002Z --> 00030
00039 --> 0003A
有什么建议吗

编辑 谢谢大家的建议。:)这就是我尝试过的,它是有效的,但不确定在某种情况下是否会断裂:/

    public static void Main(string[] args)
    {
        string number = "0001Z";            
        var result = Increment(number);

    }

    private static String Increment(String number)
    {
        String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";            
        char lastChar = number[number.Length - 1];
        string fragment = number.Substring(0, number.Length - 1);

        if (chars.IndexOf(lastChar) < 35)
        {
            lastChar = chars[chars.IndexOf(lastChar) + 1];
           string nextNumber = fragment + lastChar;
            return nextNumber;
        }
        return Increment(fragment) + '0';            
    }
publicstaticvoidmain(字符串[]args)
{
字符串编号=“0001Z”;
var结果=增量(数字);
}
专用静态字符串增量(字符串编号)
{
String chars=“0123456789abcdefghijklmnopqrstuvxyz”;
char lastChar=number[number.Length-1];
字符串片段=number.Substring(0,number.Length-1);
if(字符索引of(lastChar)<35)
{
lastChar=chars[chars.IndexOf(lastChar)+1];
字符串nextNumber=fragment+lastChar;
返回下一个编号;
}
返回增量(片段)+“0”;
}

PS:-这是我从哪里得到的,所以可能是重复的问题。。对不起。

我有两种方法可以将整数转换成不同的基数。我相信他们可能会有所改进。但他们可能会让你开始。因此,将基数36“数字”转换为int,递增1,然后再转换回基数36。此方法使用递归,这可能不是必需的。我想知道是否有更有效的方法

这些方法假定除0-9和A-Z之外没有其他字符

void Main()
{
    string input = "0000Z";
    int value = baseToInt(input, 36);
    value++;
    string output = intToBase(value, 36).PadLeft(5, '0');

    Console.WriteLine("Input: {0}", input);
    Console.WriteLine("Output: {0}", output);
}

public string intToBase(int input, int @base)
{
    var digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    if (@base < 2 || @base > 36)
    {
        throw new ArgumentOutOfRangeException("base", "Must specify a base between 2 and 36, inclusive");
    }

    if (input < @base && input >= 0)
    {
        return digits[input].ToString();
    }
    else
    {
        return intToBase(input / @base, @base) + digits[input % @base].ToString();
    }
}

public int baseToInt(string input, int @base)
{
    var digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    if (@base < 2 || @base > 36)
    {
        throw new ArgumentOutOfRangeException("base", "Must specify a base between 2 and 36, inclusive");
    }

    var digitsInBase = digits.Substring(0, @base);

    if (input.Any(c => !digitsInBase.Contains(c)))
    {
        throw new ArgumentOutOfRangeException("input", string.Format("Input is not a valid base {0} number", @base));
    }

    return (int)input.Select((c, i) => Math.Pow(@base, input.Length - (i + 1)) * digitsInBase.IndexOf(c)).Sum();

}
void Main()
{
字符串输入=“0000Z”;
int值=baseToInt(输入,36);
值++;
字符串输出=intToBase(值,36).PadLeft(5,'0');
WriteLine(“输入:{0}”,输入);
WriteLine(“输出:{0}”,Output);
}
公共字符串intToBase(int输入,int@base)
{
var digits=“0123456789abcdefghijklmnopqrstuvxyz”;
如果(@base<2 | |@base>36)
{
抛出新ArgumentOutOfRangeException(“base”,“必须指定一个介于2和36之间的基数,包括2和36”);
}
如果(输入<@base&&input>=0)
{
返回数字[input].ToString();
}
其他的
{
返回intToBase(input/@base,@base)+数字[input%@base].ToString();
}
}
公共int-baseToInt(字符串输入,int@base)
{
var digits=“0123456789abcdefghijklmnopqrstuvxyz”;
如果(@base<2 | |@base>36)
{
抛出新ArgumentOutOfRangeException(“base”,“必须指定一个介于2和36之间的基数,包括2和36”);
}
var digitsInBase=数字。子字符串(0,@base);
if(input.Any(c=>!digitsInBase.Contains(c)))
{
抛出新ArgumentOutOfRangeException(“input”,string.Format(“input不是有效的基{0}号,@base”);
}
return(int)input.Select((c,i)=>Math.Pow(@base,input.Length-(i+1))*digitsInBase.IndexOf(c)).Sum();
}
输出:

输入:0000Z
输出:00010


您正在查找BASE-36转换,请参阅BASE-36中的类似于
Output=Input+1
。类似问题?向我们展示代码,然后询问有关该代码的特定问题。