7

「1番目」、「10番目」、「100番目」などの単語を同等の数値に変換する方法を知っている人はいますか?

サンプル: 「1 番目」 -> 1、「2 番目」 -> 2、「10 番目」 -> 10、「100 番目」 -> 100

どんなアルゴリズムでも十分ですが、私はこれを C# で書いています。

編集

それはきれいではなく、一度に 1 つの単語でしか機能しませんが、私の目的には合っています。誰かがそれを改善できるかもしれませんが、私は時間がありません。

 public static int GetNumberFromOrdinalString(string inputString)
    {
        string[] ordinalNumberWords = { "", "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth", "sixteenth", "seventeenth", "eighteenth", "nineteenth", "twentieth" };
        string[] ordinalNumberWordsTens = { "", "tenth", "twentieth", "thirtieth", "fortieth", "fiftieth", "sixtieth", "seventieth", "eightieth", "ninetieth" };
        string[] ordinalNumberWordsExtended = {"hundredth", "thousandth", "millionth", "billionth" };

        if (inputString.IsNullOrEmpty() || inputString.Length < 5 || inputString.Contains(" ")) return 0;

        if (ordinalNumberWords.Contains(inputString) || ordinalNumberWordsTens.Contains(inputString))
        {
            var outputMultiplier = ordinalNumberWords.Contains(inputString) ? 1 : 10;
            var arrayToCheck = ordinalNumberWords.Contains(inputString) ? ordinalNumberWords : ordinalNumberWordsTens;

            // Use the loop counter to get our output integer.
            for (int x = 0; x < arrayToCheck.Count(); x++)
            {
                if (arrayToCheck[x] == inputString)
                {
                    return x * outputMultiplier;
                }
            }
        }

        // Check if the number is one of our extended numbers and return the appropriate value.
        if (ordinalNumberWordsExtended.Contains(inputString))
        {
            return inputString == ordinalNumberWordsExtended[0] ? 100 : inputString == ordinalNumberWordsExtended[1] ? 1000 : inputString == ordinalNumberWordsExtended[2] ? 1000000 : 1000000000;
        }

        return 0;
    }
4

2 に答える 2

2

「and」という言葉が整数から小数への移行であることを知っている以上、これほど深く考えたことはありません。お気に入り

199 ドルと 10 セント

いいえ

百九十九ドル。

とにかく、潜在的な解決策は、入力文字列を解析するか、例外を発生させるか、そうでなければ値を返す必要があります。

しかし、最初に「ルール」を知っておく必要があります.

数学博士に聞く

于 2010-09-29T02:25:58.463 に答える
0

予想される最大範囲まで文字列を値にマップし、文字列を順番に解析して、値をそのまま配置する必要があると思います。桁違いの規則的な命名規則はほとんどないため、単語を解析してその数値を取得するエレガントで簡単な方法はないと思います。幸いなことに、フォーマットによっては、すべての桁をマッピングするだけで十分です。たとえば、0 ~ 100 の数字だけが必要で、それらが「99」と入力された場合は、0 ~ 9、次に 10 ~ 100 を 10 刻みでマッピングするだけで済みます。

于 2010-09-29T04:33:54.420 に答える