面试遇到的一个问题,实现例如:
输入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();
}
}