C# 递增字母数字字符串

C# 递增字母数字字符串,c#,C#,我正在尝试使用给定的字符集递增字母数字字符串 假设输入为0000a 那么输出应该是0000b 但是,当输入达到定义的限制时,比如zzzzz 它应该重置为00001 我读了以下内容 使用 这似乎是最好的方法 我有以下课程 Namespace BatchNo_Generator { class RandomStringGenerator { public enum Mode { ALPHANUMERIC = 1, ALPHA = 2,

我正在尝试使用给定的字符集递增字母数字字符串 假设输入为0000a 那么输出应该是0000b

但是,当输入达到定义的限制时,比如zzzzz 它应该重置为00001

我读了以下内容

使用

这似乎是最好的方法

我有以下课程

Namespace BatchNo_Generator
{
class RandomStringGenerator
{
    public enum Mode
    {
        ALPHANUMERIC = 1,
        ALPHA = 2,
        NUMERIC = 3,

    }

    public string genbase(int length, string mode)
    {
        int j = 0;
        if (mode == "ALPHANUMERIC")
        {
            StringBuilder s = new StringBuilder();
            while (j < length - 1)
            {
                s.Insert(0, "0");
                j++;
            }
            s.Insert(s.Length, "1");
            return s.ToString();
        }
        if (mode == "ALPHA")
        {

            StringBuilder s = new StringBuilder();
            while (j < length - 1)
            {
                s.Insert(0, "a");
                j++;
            }
            s.Insert(s.Length, "a");
            return s.ToString();
        }
        if (mode == "NUMERIC")
        {

            StringBuilder s = new StringBuilder();
            while (j < length - 1)
            {
                s.Insert(0, "0");
                j++;
            }
            s.Insert(s.Length, "1");
            return s.ToString();
        }
        return "";

    }

    public string gennext(string current, string mode, char endchar)
    {

        StringBuilder s = new StringBuilder(current);
        int i = current.Length;
        if (mode == "ALPHA")
        {
            for (int j = i; j > 0; j--)
            {
                if (checkend(s[j - 1], endchar, 'a', mode) == true)
                {
                    s[j] = resetchar(s[j], 'a');
                    incrementchar(s[j + 1], mode);

                }
                else
                {
                    char c = incrementchar(s[j - 1], mode);
                    s.Remove(j - 1, 1);
                    s.Insert(j - 1, c);
                    break;
                }
            }
            return s.ToString();
        }
        if (mode == "NUMERIC")
        {
            for (int j = i; j > 0; j--)
            {
                if (checkend(s[j - 1], endchar, '0', mode) == true)
                {
                    s[j-1] = resetchar(s[j-1], '0');
                    incrementchar(s[j - 1], mode);

                }
                else
                {

                    char c = incrementchar(s[j - 1], mode);
                    s.Remove(j - 1, 1);
                    s.Insert(j - 1, c);

                }
            }
            return s.ToString();
        }
        if (mode == "ALPHANUMERIC")
        {
            for (int j = i; j > 0; j--)
            {
                if (checkend(s[j - 1], endchar, '0', mode) == true)
                {
                    s[j-1] = resetchar(s[j-1], '0');
                    char c = incrementchar(s[j - 1], mode);
                }
                else
                {
                    {
                    char c = incrementchar(s[j - 1], mode);
                    s.Remove(j - 1, 1);
                    s.Insert(j - 1, c);
                    break;
                    }
                }
            }
            return s.ToString();
        }
        return "";
    }

    public char incrementchar(char c, string mode)
    {
        char cnew = c++;
        switch (mode)
        {
            case "ALPHA":
                {
                    if (char.IsLetter(c) == false) { cnew++; }
                    else { return char.ToLower(c); }
                    break;
                }
            case "NUMERIC":
                {
                    if (char.IsDigit(c) == false) { cnew++; }
                    else { return c; }
                    break;
                }
            case "ALPHANUMERIC":
                {
                    while (char.IsLetterOrDigit(c) == false) { c++; }
                   // if (char.IsLetterOrDigit(c) == false) { cnew++; }
                   // else { return char.ToLower(c); }
                    return char.ToLower(c);
                    break;
                }
        }
        return '?';
    }

    public bool checkend(char current, char end, char start, string mode)
    {
        if (current == end) { return true; }
        else { return false; }
    }

    public char resetchar(char inputchar, char defaultchar)
    {
        return defaultchar;
    }

    public static IEnumerable<string> GetColumns(char startchar, char endchar)
    {
        string s = null;
        for (char c2 = startchar; c2 <= endchar + 1; c2++)
        {
            for (char c = 'A'; c <= 'Z'; c++)
            {
                if (char.IsLetter(c) == true)
                {
                    yield return s + char.ToLower(c);
                }

            }
            if (char.IsLetterOrDigit(c2) == true)
            {
                s = c2.ToString();
            }
        }
    }

}
我遇到的问题是,此输入0zzzz返回0zzzª

任何帮助都将不胜感激

我知道代码很松散,当我得到一个工作集时,我会清理它
public enum Mode
{
    AlphaNumeric = 1,
    Alpha = 2,
    Numeric = 3
}

public static string Increment(string text, Mode mode)
{
    var textArr = text.ToCharArray();

    // Add legal characters
    var characters = new List<char>();

    if (mode == Mode.AlphaNumeric || mode == Mode.Numeric)
        for (char c = '0'; c <= '9'; c++)
            characters.Add(c);

    if (mode == Mode.AlphaNumeric || mode == Mode.Alpha)
        for (char c = 'a'; c <= 'z'; c++)
            characters.Add(c);

    // Loop from end to beginning
    for (int i = textArr.Length - 1; i >= 0; i--)
    {
        if (textArr[i] == characters.Last())
        {
            textArr[i] = characters.First();
        }
        else
        {
            textArr[i] = characters[characters.IndexOf(textArr[i]) + 1];
            break;
        }
    }

    return new string(textArr);
}

// Testing
var test1 = Increment("0001", Mode.AlphaNumeric);
var test2 = Increment("aab2z", Mode.AlphaNumeric);
var test3 = Increment("0009", Mode.Numeric);
var test4 = Increment("zz", Mode.Alpha);
var test5 = Increment("999", Mode.Numeric);
{ 字母数字=1, α=2, 数值=3 } 公共静态字符串增量(字符串文本,模式) { var textArr=text.ToCharArray(); //添加合法字符 var characters=新列表(); if(mode==mode.AlphaNumeric | | mode==mode.Numeric) 对于(char c='0';c
public枚举模式
{
字母数字=1,
α=2,
数值=3
}
公共静态字符串增量(字符串文本,模式)
{
var textArr=text.ToCharArray();
//添加合法字符
var characters=新列表();
if(mode==mode.AlphaNumeric | | mode==mode.Numeric)

对于(char c=‘0’;C边注释:草率代码倾向于产生草率的结果……首先考虑清理它……也许简单的复制粘贴可以帮助。因为您发送的是“0”作为端点,该方法不知道该怎么做。您应该将“Z”作为参数“Enchar”发送。因为现在您用“0”调用方法检查结束。在StasChar和EntChar。SoudiNote中:草率代码倾向于产生草率的结果。首先考虑清理它。也许简单的复制粘贴可以帮助。因为发送“0”作为端点,该方法不知道该怎么做。应该将“Z”作为参数“EntChar”发送。因为现在您用“0”调用方法检查结束。在startChar和endChar上。
RandomStringGenerator test = new RandomStringGenerator();
MessageBox.Show(test.gennext("0zzzz","ALPHANUMERIC",'0'));
public enum Mode
{
    AlphaNumeric = 1,
    Alpha = 2,
    Numeric = 3
}

public static string Increment(string text, Mode mode)
{
    var textArr = text.ToCharArray();

    // Add legal characters
    var characters = new List<char>();

    if (mode == Mode.AlphaNumeric || mode == Mode.Numeric)
        for (char c = '0'; c <= '9'; c++)
            characters.Add(c);

    if (mode == Mode.AlphaNumeric || mode == Mode.Alpha)
        for (char c = 'a'; c <= 'z'; c++)
            characters.Add(c);

    // Loop from end to beginning
    for (int i = textArr.Length - 1; i >= 0; i--)
    {
        if (textArr[i] == characters.Last())
        {
            textArr[i] = characters.First();
        }
        else
        {
            textArr[i] = characters[characters.IndexOf(textArr[i]) + 1];
            break;
        }
    }

    return new string(textArr);
}

// Testing
var test1 = Increment("0001", Mode.AlphaNumeric);
var test2 = Increment("aab2z", Mode.AlphaNumeric);
var test3 = Increment("0009", Mode.Numeric);
var test4 = Increment("zz", Mode.Alpha);
var test5 = Increment("999", Mode.Numeric);