Преобразовать порядковые номера в числа - PullRequest
0 голосов
/ 23 февраля 2012

Я ищу решение, которое в некоторой степени связано с Существует ли простой способ создания ординалов в C #? , но обратный.

Я хотел бы автоматизировать следующие преобразования:

Первый -> 1-й

Второй -> Второй

Третий -> 3-й

Девяносто девятый -> 99-й и т. Д.

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

Как правило, это проще всего сделать путем анализа числа с помощью словаря числовых слов.Правила:

  • Преобразование строки в нижний регистр и разделение строки на слова на основе пробелов, запятых и / или тире.Удалите пустые записи (которые соответствуют соседним множественным разделителям).

  • Начните с первого слова строки.Это должно быть слово, соответствующее одному из первых девятнадцати натуральных чисел - «один», «два», «три», ..., «семнадцать», «восемнадцать», «девятнадцать» - или кратное десяти от «двадцать "до" девяноста ".Помните, что, поскольку вы должны учитывать порядковые номера, числовые слова, которые вы ищете, имеют как предыдущую форму, так и форму, оканчивающуюся на "st", "nd", "rd" или "th";Разница в том, что если вы видите порядковую версию любого слова, вам следует покончить.В любом случае, после поиска числового слова (и, надеюсь, найденного значения) в заранее определенном Dictionary<string, int>, содержащем ваши числовые слова и соответствующие значения, запомните это число как ваше «рабочее значение».

  • Теперь начнем перебирать слова.Если следующее слово также является одним из этих слов с натуральными числами, добавьте его к значению «рабочего значения», но не добавляйте значение к «промежуточному итогу».

  • Если следующим словом является индикатор порядка (сто, тысячи, миллион, миллиард, триллион), умножьте свое рабочее значение на порядок.Затем «заглянуть» на следующее слово;если это также слово OOM (главное слово «сто тысяч», но британский английский также допускает использование «тысячи миллионов» в качестве синонима того, что мы знаем как «миллиард»), и некоторые действительно большие разговорные числа можно сказать с повторяющимися меньшими OOMкак «миллион миллионов миллионов»), сохраните то, что у вас есть, и продолжайте повторять;в противном случае добавьте ваше текущее рабочее значение к промежуточному итоговому значению и обнулите ваше рабочее значение, прежде чем двигаться дальше.

  • Когда вы достигнете последнего слова в числовой строке, добавьте все, что у вас естьрабочее значение для вашего промежуточного итога.

Ваш промежуточный итог теперь является числовым представлением числовых слов, которые вы только что проанализировали.Чтобы снова сделать его числовым порядковым номером, просто вызовите ToString для этого номера, а затем добавьте «st», если значение одного из них равно «1», «nd», если это «2», «rd», если это «3»,или 'th', если это любая другая цифра.

0 голосов
/ 23 февраля 2012

На мой взгляд, самый простой способ - сгенерировать массивы (используя код для нормального / не обратного преобразования) для первой и второй цифры, затем выполнить поиск в этих массивах.

После 100 вам просто нужно добавить «сотню», тысяча "и т. д.

Подсказка: прочитайте слова с конца, в этом направлении:

<---------   <----------
one hundred twenty first
  4       3      2     1
0 голосов
/ 23 февраля 2012

В английском языке единственными числами со специальными терминами являются 1-20 и кратные 10 к 90 (20, 30, 40 и т. Д.), Например, "Сороковая" (особенно досадно, поскольку это не "Сороковая") или "Девятнадцатое ".

Если вы анализируете для этих особых случаев, все остальное обычно выражается как число <100, множитель, необязательные" и "перед последним выражением и" th "после всей фразы, например"((Четыре) (Сто)) [и] (Пятьдесят) (Шесть) [th] ". </p>

...