为了账号安全,请及时绑定邮箱和手机立即绑定

如何递增由 .'s 分隔的字符串值编号(即 1.2.3 == 1.2.4)

如何递增由 .'s 分隔的字符串值编号(即 1.2.3 == 1.2.4)

C#
拉莫斯之舞 2022-12-31 13:13:44
我正在尝试更新一个字符串参数并返回另一个具有更新版本号的字符串。示例输入和输出:nextVersion("1.2.3") === "1.2.4";nextVersion("0.9.9") === "1.0.0.";nextVersion("1") === "2";nextVersion("1.2.3.4.5.6.7.8") === "1.2.3.4.5.6.7.9";nextVersion("9.9") === "10.0";除第一个数字外,所有数字不得大于 10:如果有,则必须将它们设置为 0 并按顺序递增下一个数字。到目前为止,我可以: - 将字符串分开 - 增加一 - 放回原处我需要帮助来确定版本号是否以 11.1 开头,因为当我增加它时,它变成 1.1.2 而不是 11.2    static void Main(string[] args)    {        string user_input;        Console.WriteLine("Hello");        Console.WriteLine("Please input the version number to increment: ");        user_input = Console.ReadLine();        string new_version_number = next_Version(user_input);        Console.WriteLine("Your number is : {0}", new_version_number);        Console.ReadKey();    }        public static string next_Version(string user_input)    {        //removing . for parsing        string string_no_dots = user_input.Replace(".", "");        //storing length to see if incrementing from version x99 to 100        int string_length = string_no_dots.Length;        //convert to int to increment version        int number_no_dots;        int.TryParse(string_no_dots,out number_no_dots);        //increment by 1        int new_version_number = number_no_dots+1;        //convert back to string        string new_version_string = Convert.ToString(new_version_number);        //add the periods        string string_with_dots = String.Join<char>(".", new_version_string);        return string_with_dots;    }输入:1.2.3.4输出:1.2.3.5 是正确的但当输入:11.2.3输出:1.1.2.4 而实际输出应该是 11.2.4感谢您的时间
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

尝试这样的事情:


public static string next_Version(string user_input)

{

    try

    {

        int[] values = user_input.Split(".".ToCharArray()).Select(s => Convert.ToInt32(s)).ToArray();

        bool carryover;

        int index = values.Length - 1;

        do

        {

            carryover = false;

            values[index]++;

            if ((index > 0) && (values[index] == 10))

            {

                values[index] = 0;

                carryover = true;

                index--;

            }

        } while (carryover && (index >= 0));

        return String.Join(".", values);

    }

    catch (Exception)

    {

        return "[ Invalid Version Input! ]";

    }

}


查看完整回答
反对 回复 2022-12-31
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我建议这样的方法:


string nextVersion(string user_input)

{

    var entries = user_input.Split('.')

                            .Select( s => int.Parse(s) )

                            .ToArray();


    void Inc(int index)

    {

        if ( index == 0 || ( entries[index] < 9 ) )

        {

            entries[index]++;

        }

        else

        {

            entries[index] = 0;

            Inc( index-1 );

        }

    }


    Inc( entries.Length-1 );


    return String.Join( ".", entries );

}

它将字符串拆分为一个数组,并将每个部分转换为一个 int。然后它对 int 进行操作,然后从 int 值重新构建版本字符串。


查看完整回答
反对 回复 2022-12-31
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

这对我有用,我在经过测试和工作的小提琴中制作了它

小提琴截图

基本上它只是检查数字的长度(以字符为单位)以及它是否大于数字+ 1的字符长度然后它将它转换为0然后将1添加到以下数字,我应该为每个长度添加1个零号码有,但这应该可以解决您的问题。

编辑:Nvm 使它适用于需要许多 0 的情况

即:1.99 == 2.00 而不是 1.99 == 2.0

小提琴链接:https ://dotnetfiddle.net/wvqHvu

using System;


public class Program

{

    public static void Main()

    {

        Console.WriteLine(next_Version("1.2.3.4"));

        Console.WriteLine(next_Version("11.2.3"));

    }

    public static string next_Version(string version)

    {

        string[] a = version.Split('.');

        int x = a.Length;

        int carrying = 1;

        while(x>0){


            int number = Convert.ToInt32(a[x-1]);


            if(Convert.ToString(number+carrying).Length > Convert.ToString(number).Length){

            string zeroes = "";

            foreach(char c in Convert.ToString(number)){

                zeroes += "0";

            }

            a[x-1] = zeroes;

            carrying = 1;

            }else{

                a[x-1] = Convert.ToString(number+carrying);

                carrying = 0;

                }

            x--;

        }

        String result = "";

        foreach(string s in a){

            result+=s+".";

        }


        return result.TrimEnd('.');

    }

}


查看完整回答
反对 回复 2022-12-31
  • 3 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信