プログラミングコンテストスタイルのアルゴリズムを書かなくても、読み取り可能なコードで、文字列内の最長の数値サフィックスで表される数値を取得するにはどうすればよいですか?
例えば
GetNumericalSuffix("Number=350") => 350,
"Num-30" => 30
"My21" => 21
等
var result = int.Parse(new string(input.Reverse()
.TakeWhile(char.IsDigit)
.Reverse()
.ToArray()));
簡単な答え:
var x = "various text 1234";
var digits = x.Reverse().TakeWhile(c => char.IsDigit(c));
var number = new string(digits.Reverse().ToArray());
public static int GetNumericalSuffix(string str)
{
Match match = Regex.Match(str, "[^0-9]*([0-9]+)$");
if (!match.Success)
return -1;
return int.Parse(match.Groups[1].Value);
}
次のような正規表現で実行できます。
MatchCollection m = Regex.Matches("Number=350", "\\d+");
int biggestMatch = 0;
foreach (Match match in m)
{
if (int.Parse(match.Value) > biggestMatch)
{
biggestMatch = int.Parse(match.Value);
}
}
以下のアイデアは、自分でコーディングします。
Char.IsDigit(currentChar)
- 別の char 配列への入力を開始する -numericChars
Char.IsDigit() == false
- から文字列を作成しnumericChars
、実行するInt32.TryParse()
List<int>
数値を解析済みの数値に格納する最後に、見つかったすべての数値のリストが表示されます。最大のものを見つけるだけです。