[英]Array char operation C#
任何人都可以幫助我如何優化我創建的代碼或有更好的方法來實現它? 規則在底部
public string HandleLastNumber(char[] n_array)
{
var n_string = new StringBuilder();
if (n_array.All(x => char.IsDigit(x)))
{
return $"{new string(n_array)} -> {int.Parse(n_array) + 1}";
}
if (!n_array.Any(x => char.IsDigit(x)))
{
return $"{new string(n_array)}->{new string(n_array)}";
}
for (int i = n_array.Length - 1; i >= 0; i--)
{
if (!char.IsDigit(n_array[i]))
{
break;
}
n_string.Insert(0, n_array[i]);
}
var n_plus = int.Parse(n_string.ToString()) + 1;
var n_handled = n_plus.ToString()[^n_string.Length..];
var sub_clone = new string(n_array).Substring(0,n_array.Length-n_handled.Length);
return $"{new string(n_array)}->{sub_clone += n_handled}";
}
}
規則是輸入字符數組,驗證最后一個數字,最后一個數字加一。 然后打印新舊字符數組
結果示例:
有很多方法可以實現這一點。 以前看過很多這樣的帖子。 我不喜歡你的方法接受char[]
。 我希望輸入和 output 是一個string
。
實現邏輯變得更加直接:
public static string IncrementLastDigits(string value)
{
if (string.IsNullOrWhiteSpace(value))
{
return value; // consider returning null or ""
}
var array = value.ToCharArray();
for (var i = array.Length - 1; i >= 0; i--)
{
var character = array[i];
if (!char.IsDigit(character))
{
break;
}
if (character < '9')
{
array[i] = ++character;
break;
}
else
{
array[i] = '0';
}
}
return new string(array);
}
這是一個快速測試它的方法:
public static void TestLastDigits()
{
var input = new List<string>() { "00", "99", "ABC123", "ABCDGF", "AD33GVB99", "AD33GV" };
var answer = new List<string>() { "01", "00", "ABC124", "ABCDGF", "AD33GVB00", "AD33GV" };
for (var i = 0; i < input.Count; i++)
{
var output = IncrementLastDigits(input[i]);
var status = (answer[i] != output) ? $"Correct answer is {answer[i]}" : "";
Console.WriteLine($"Input {input[i]}, Output {output} {status}");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.