C# 之实现输入一个字母加数字组合输出前面不变最后一位加1

面试遇到的一个问题,实现例如:
输入ABCD001输出ABCD002
输入AAAA1234输出AAAA1235

由于时间关系,加上自己学习的不够扎实,没有第一时间想出来,当时想的是分开输入在用Join()连接,这样是多了一步的用户操作,后来回来想到利用substring 与remove 加 join联合实现,具体代码如下:

        static void Main(string[] args)
        {
            Console.Write("请输入一组字母数字组合:");
            string Str = Console.ReadLine();
            String newStr = Str.Substring(Str.Length - 1);//选取我们输入英文加数字的最后一位
            int newStr1 = int.Parse(newStr);//进行类型转换,以便于+1计算
            int newStr2 = newStr1 + 1;
            Str = Str.Remove(Str.Length - 1, 1);//移除掉最后一位数字
            string endStr = string.Join("", Str, newStr2);//连接移除最后一位后的Str与选取过最后一位进行+1了的newStr2 
            Console.WriteLine("输出的结果为:"+ endStr);
            Console.ReadKey();  
        }

输出结果为:
在这里插入图片描述
在这里插入图片描述
当然这种方法不够完善,如果输入的最后一位不是数字则会进行报错!!!!

通过提问,在这里感谢“weixin_45841714”大佬得解答,得到了判断输入的字母数字组合最后一位是否为数字的答案。
改善后的解决方法如下:

static void Main(string[] args)
{
    while (true)
    {
        Console.WriteLine("请输入一组字母数字组合:");
        string Str = Console.ReadLine();
        string newStr = Str.Substring(Str.Length - 1);
        if (Str.All(x => newStr.Contains(x)))
        //大佬提供的判断方法。暂时还没有理解这个函数的意思,如果你知道可以留个言,谢谢!
        {
            Console.Write("类型不正确,");
            continue;
        }

        else
        {
            int newStr1 = int.Parse(newStr);
            int newStr2 = newStr1 + 1;
            Str = Str.Remove(Str.Length - 1, 1);
            string endstr = string.Join("", Str, newStr2);
            Console.WriteLine("输出的结果为:" + endstr);
            //break;根据情况看是否需要中断
        }
        Console.ReadKey();
    }
}

结果如下:
在这里插入图片描述

-----------2024.03.28 补充说明----------

多年之后对问题进行补充,发现之前提供的方法的含义是遍历所有元素,然后看每个元素是否都等于A,这样会有一个弊端,对相同的字母组成的字符串能适用。但是对不同的就不行了,所以我对方法进行进一步的优化。
方法一:大力出奇迹,穷举法,将最后一位判断是等于0,1,2,3,4,5,6,7,8,9,需要注意的是当等于9的时候会变成10。

方法二:我们使用正则表达式判断最后一位是否为数字即可

static void Main(string[] args)
{
    while (true)
    {
        Console.WriteLine("请输入一组字母数字组合:");
        string Str = Console.ReadLine();
        string newStr = Str.Substring(Str.Length - 1);
        if (Regex.IsMatch(newStr, @"^\d+$")) //正则表达式判断是否为整数

        {
            Console.Write("类型不正确,");
            continue;
        }

        else
        {
            int newStr1 = int.Parse(newStr);
            int newStr2 = newStr1 + 1;
            Str = Str.Remove(Str.Length - 1, 1);
            string endstr = string.Join("", Str, newStr2);
            Console.WriteLine("输出的结果为:" + endstr);
            //break;根据情况看是否需要中断
        }
        Console.ReadKey();
    }
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值