-4

プログラミングコンテストスタイルのアルゴリズムを書かなくても、読み取り可能なコードで、文字列内の最長の数値サフィックスで表される数値を取得するにはどうすればよいですか?

例えば

GetNumericalSuffix("Number=350") => 350, 
"Num-30" => 30
"My21" => 21

4

5 に答える 5

6
var result = int.Parse(new string(input.Reverse()
                                       .TakeWhile(char.IsDigit)
                                       .Reverse()
                                       .ToArray()));
于 2013-06-26T08:51:42.500 に答える
3

簡単な答え:

var x = "various text 1234";
var digits = x.Reverse().TakeWhile(c => char.IsDigit(c));
var number = new string(digits.Reverse().ToArray());
于 2013-06-26T08:51:16.887 に答える
3
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);
}
于 2013-06-26T08:49:05.253 に答える
0

次のような正規表現で実行できます。

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);
   }
}
于 2013-06-26T08:51:31.680 に答える
0

以下のアイデアは、自分でコーディングします。

  1. 文字列を char 配列として char ごとに読み取る
  2. If Char.IsDigit(currentChar)- 別の char 配列への入力を開始する -numericChars
  3. いつChar.IsDigit() == false- から文字列を作成しnumericChars、実行するInt32.TryParse()
  4. List<int>数値を解析済みの数値に格納する

最後に、見つかったすべての数値のリストが表示されます。最大のものを見つけるだけです。

于 2013-06-26T08:48:08.123 に答える