Есть ли простой метод преобразования порядковой числовой строки в соответствующее числовое значение?

Кто-нибудь знает способ преобразования таких слов, как "первый", "десятый" и "сотый" в их числовой эквивалент?

Примеры: «первый» -> 1, «второй» -> 2, «десятая» -> 10, "сотый" -> 100

Подойдет любой алгоритм, но я пишу его на C #.

РЕДАКТИРОВАТЬ

Это некрасиво, работает только с одним словом за раз, но подходит для моих целей. Может быть, кто-нибудь сможет это улучшить, но у меня нет времени.

 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;
    }
7
задан Bergi 6 December 2013 в 14:17
поделиться