在c#win中以另一种方式增加变量。形成

时间:2014-11-20 05:23:54

标签: c# winforms increment

发明了一种算法,其中创建了一个新的数字,即" z" (实际上不是z)我正在使用它使用旧数字(0123456789)和我的新系列数字看起来像这样(0123456789z)但这里的问题是如何编写一个给出" 19 + 1" as" z"和" z + 1" as" 20"。

3 个答案:

答案 0 :(得分:0)

在您编辑问题后,我认为您所追求的是

public int incrementNumber(string number)
{
    var lastNumber = int.Parse(number.Last());
    return (number.Length - 1) + ((lastNumber + 1) % 10).ToString();
}

%10或Mod 10将提醒数字除以10.因此,如果你传入9,它将增加到10然后回绕到0.当你传入5时,它将增加到6并保持为6因为它不能被10整除。

答案 1 :(得分:0)

这可能没有优化,但如果允许+1递增则有效。

 public static string NextValue(string Counting)
    {
        int nextVal;
        if(int.TryParse(Counting, out nextVal))
        {
            return (nextVal + 1).ToString();
        }
        else 
        {
            char[] numbers = Counting.ToCharArray();
            StringBuilder incremented = new StringBuilder();
            foreach (char digit in numbers.Reverse())
            {
                if (digit == 'z')
                {
                   incremented.Append("0");
                }
                else if (int.TryParse(digit.ToString(), out nextVal))
                {
                    nextVal = nextVal + 1;
                    if (nextVal == 10)
                    {
                        incremented.Append("z");
                    }
                    else
                    {
                        incremented.Append(nextVal.ToString());
                    }

                    incremented.Append(string.Concat(numbers.Reverse().Skip(incremented.Length)));
                    break;
                }
                else
                {
                    //Invalid character in number except for z
                    return string.Empty;
                }
            }
            if (incremented[incremented.Length - 1] == '0')
                incremented.Append("1");
            return Reverse(incremented.ToString()); 
        }    
    }

     public static string Reverse(string s)
     {
         char[] charArray = s.ToCharArray();
         Array.Reverse(charArray);
         return new string(charArray);
     }

答案 2 :(得分:0)

尝试类似这样的事情,但是如果最后一个字符达到 0 ,您必须实施额外的参数检查编码并递增倒数第二个字符。

这是基本逻辑:

private const string DIGITS = "0123456789z";

static void Main(string[] args)
{
    Console.WriteLine(NextValue("9"));
    Console.ReadKey();
}

private static string NextValue(string value)
{
    char nextChar = '\0';
    if(!string.IsNullOrEmpty(value))
    {
        char lastChar = value[value.Length - 1];
        int nextCharIndex = DIGITS.IndexOf(lastChar) + 1;
        if (nextCharIndex > DIGITS.Length)
            nextChar = DIGITS[0];
        else
            nextChar = DIGITS[nextCharIndex];
    }
    return nextChar.ToString();
}