Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中,将字符串从数字0-9增加到小写a-z,再增加到大写a-z#_C#_String_Increment_Uppercase_Lowercase - Fatal编程技术网

C# 在C中,将字符串从数字0-9增加到小写a-z,再增加到大写a-z#

C# 在C中,将字符串从数字0-9增加到小写a-z,再增加到大写a-z#,c#,string,increment,uppercase,lowercase,C#,String,Increment,Uppercase,Lowercase,我希望能够有一个以“000000”开头的6个字符长的字符串。然后,当我达到9时,我想增加一个'000001',当我达到z时,我想增加到'00000a',我想增加到'00000a'。当到达“Z”时,我想将第一个重置为0,并从下一个位置“000010”开始,依此类推。 ‘000011’、‘000012’、‘0000a0’、‘0000a1’、‘0000a0’、‘0000a1’ 在C#中,我将如何执行此操作 先谢谢你。 Mike这使用IntToString支持问题中的任意基数,但硬编码使用您的格式(即b

我希望能够有一个以“000000”开头的6个字符长的字符串。然后,当我达到9时,我想增加一个'000001',当我达到z时,我想增加到'00000a',我想增加到'00000a'。当到达“Z”时,我想将第一个重置为0,并从下一个位置“000010”开始,依此类推。 ‘000011’、‘000012’、‘0000a0’、‘0000a1’、‘0000a0’、‘0000a1’

在C#中,我将如何执行此操作

先谢谢你。
Mike

这使用
IntToString
支持问题中的任意基数,但硬编码使用您的格式(即base 62)


这里还有另一种方法……它允许您传入“起始修订版”(“示例中的000000”)。很久以前,我最初是在VB.Net中写这篇文章的,是为了回答一个有着非常具体要求的问题……所以下面的内容可能不是最有效的方法

public partial class Form1 : Form
{

    private Revision rev;

    public Form1()
    {
        InitializeComponent();
        Reset();
    }

    private void Reset()
    {
        rev = new Revision("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "000000");
        label1.Text = rev.CurrentRevision;
    }

    private void btnReset_Click(object sender, EventArgs e)
    {
        Reset();
    }

    private void btnNext_Click(object sender, EventArgs e)
    {
        rev.NextRevision();
        if (rev.CurrentRevision.Length == 7)
        {
            MessageBox.Show("Sequence Complete");
            Reset();
        }
        else
        {
            label1.Text = rev.CurrentRevision;
        }
    }

}

public class Revision
{

    private string chars;
    private char[] values;

    private System.Text.StringBuilder curRevision;

    public Revision()
    {
        this.DefaultRevision();
    }

    public Revision(string validChars)
    {
        if (validChars.Length > 0)
        {
            chars = validChars;
            values = validChars.ToCharArray();
            curRevision = new System.Text.StringBuilder(values[0]);
        }
        else
        {
            this.DefaultRevision();
        }
    }

    public Revision(string validChars, string startingRevision)
        : this(validChars)
    {
        curRevision = new System.Text.StringBuilder(startingRevision);
        int i = 0;
        for (i = 0; i <= curRevision.Length - 1; i++)
        {
            if (Array.IndexOf(values, curRevision[i]) == -1)
            {
                curRevision = new System.Text.StringBuilder(values[0]);
                break;
            }
        }
    }

    private void DefaultRevision()
    {
        chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        values = chars.ToCharArray();
        curRevision = new System.Text.StringBuilder(values[0]);
    }

    public string ValidChars
    {
        get { return chars; }
    }

    public string CurrentRevision
    {
        get { return curRevision.ToString(); }
    }

    public string NextRevision(int numRevisions = 1)
    {
        bool forward = (numRevisions > 0);
        numRevisions = Math.Abs(numRevisions);
        int i = 0;
        for (i = 1; i <= numRevisions; i++)
        {
            if (forward)
            {
                this.Increment();
            }
            else
            {
                this.Decrement();
            }
        }
        return this.CurrentRevision;
    }

    private void Increment()
    {
        char curChar = curRevision[curRevision.Length - 1];
        int index = Array.IndexOf(values, curChar);
        if (index < (chars.Length - 1))
        {
            index = index + 1;
            curRevision[curRevision.Length - 1] = values[index];
        }
        else
        {
            curRevision[curRevision.Length - 1] = values[0];
            int i = 0;
            int startPosition = curRevision.Length - 2;
            for (i = startPosition; i >= 0; i += -1)
            {
                curChar = curRevision[i];
                index = Array.IndexOf(values, curChar);
                if (index < (values.Length - 1))
                {
                    index = index + 1;
                    curRevision[i] = values[index];
                    return;
                }
                else
                {
                    curRevision[i] = values[0];
                }
            }
            curRevision.Insert(0, values[0]);
        }
    }

    private void Decrement()
    {
        char curChar = curRevision[curRevision.Length - 1];
        int index = Array.IndexOf(values, curChar);
        if (index > 0)
        {
            index = index - 1;
            curRevision[curRevision.Length - 1] = values[index];
        }
        else
        {
            curRevision[curRevision.Length - 1] = values[values.Length - 1];
            int i = 0;
            int startPosition = curRevision.Length - 2;
            for (i = startPosition; i >= 0; i += -1)
            {
                curChar = curRevision[i];
                index = Array.IndexOf(values, curChar);
                if (index > 0)
                {
                    index = index - 1;
                    curRevision[i] = values[index];
                    return;
                }
                else
                {
                    curRevision[i] = values[values.Length - 1];
                }
            }
            curRevision.Remove(0, 1);
            if (curRevision.Length == 0)
            {
                curRevision.Insert(0, values[0]);
            }
        }
    }

}
公共部分类表单1:表单
{
私人修订版;
公共表格1()
{
初始化组件();
重置();
}
私有无效重置()
{
版本=新版本(“0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”,“000000”);
label1.Text=rev.CurrentRevision;
}
私有void btnReset_单击(对象发送者,事件参数e)
{
重置();
}
private void btnNext_单击(对象发送方,事件参数e)
{
NextRevision();
如果(rev.CurrentRevision.Length==7)
{
MessageBox.Show(“序列完成”);
重置();
}
其他的
{
label1.Text=rev.CurrentRevision;
}
}
}
公共课复习
{
私有字符串字符;
私有字符[]值;
private System.Text.StringBuilder curRevision;
公开修订()
{
这个.DefaultRevision();
}
公共修订(字符串validChars)
{
如果(有效长度>0)
{
字符=有效字符;
values=validChars.ToCharArray();
curRevision=new System.Text.StringBuilder(值[0]);
}
其他的
{
这个.DefaultRevision();
}
}
公共修订(字符串有效字符、字符串起始修订)
:此(有效字符)
{
curRevision=new System.Text.StringBuilder(startingRevision);
int i=0;
对于(i=0;i=0);
numRevisions=Math.Abs(numRevisions);
int i=0;
对于(i=1;i=0;i+=-1)
{
curChar=curRevision[i];
index=Array.IndexOf(值,curChar);
如果(索引<(值.长度-1))
{
指数=指数+1;
curRevision[i]=值[索引];
返回;
}
其他的
{
curRevision[i]=值[0];
}
}
插入(0,值[0]);
}
}
私有无效减量()
{
char curChar=curRevision[curRevision.Length-1];
int index=Array.IndexOf(值,curChar);
如果(索引>0)
{
指数=指数-1;
curRevision[curRevision.Length-1]=值[索引];
}
其他的
{
curRevision[curRevision.Length-1]=值[values.Length-1];
int i=0;
int startPosition=currenvision.Length-2;
对于(i=startPosition;i>=0;i+=1)
{
curChar=curRevision[i];
index=Array.IndexOf(值,curChar);
如果(索引>0)
{
指数=指数-1;
curRevision[i]=值[索引];
返回;
}
其他的
{
curRevision[i]=值[values.Length-1];
}
}
curRevision.Remove(0,1);
if(curRevision.Length==0)
{
插入(0,值[0]);
}
}
}
}

一种基于字符串的方法,类似于Tim的答案:

private static string Increment(string input)
    {
        var myChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
        var array = input.ToCharArray();

        for (int i = array.Count()-1; i >= 0; i--)
        {
            int newValue = (Array.IndexOf(myChars, array[i]) + 1) % 62;
            array[i] = myChars[newValue];
            if (newValue != 0)
                break;
        }
        return new string(array);
    }

这听起来像是家庭作业?你是否有任何你已经尝试过的代码可以添加到你的问题中?逻辑不是很清楚,你能详细说明一下“我想在我达到9时增加一个‘000001’我想去‘00000a’”?我不是学生。我是用存储过程做的,但我认为程序最好是在本地运行,而不是在sql server上运行。@Mike:为什么你认为客户端比db server更合适?如果这个数字与db有关,你应该让它根据当前的最高数字从db计算出来。Tim,它本质上只是在字符串中添加一个,但不是0-9的范围,我们有一个0-9的范围,然后是a-z,然后是a-z。谢谢Tim,这让我开始了。
private static string Increment(string input)
    {
        var myChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
        var array = input.ToCharArray();

        for (int i = array.Count()-1; i >= 0; i--)
        {
            int newValue = (Array.IndexOf(myChars, array[i]) + 1) % 62;
            array[i] = myChars[newValue];
            if (newValue != 0)
                break;
        }
        return new string(array);
    }