Преобразование порядковых номеров в числа

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

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

Первый --> 1-й

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

Третий --> третий

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


person Blue Cloud    schedule 23.02.2012    source источник
comment
Сделайте противоположное тому, что пример, который вы показали в ссылке ... пробовали ли вы это ... ответ на самом деле вам дан ...   -  person MethodMan    schedule 23.02.2012
comment
Это может показаться глупым: Один миллион двести двенадцать тысяч восемьсот семьдесят шестой -> 1212876-й.. Это разделение, сопоставление, несколько таблиц поиска и некоторые простые арифметические действия. Если вам повезет, кто-то уже сделал это, и вы можете позаимствовать их решение.   -  person Tony Hopkinson    schedule 23.02.2012


Ответы (3)


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

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

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

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

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

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

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

person KeithS    schedule 23.02.2012

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

Если вы анализируете эти особые случаи, все остальное обычно выражается в виде числа ‹ 100 множителя, необязательного «и» перед последним выражением и «th» после всей фразы, например. «((Четыре) (Сотня)) [и] (Пятьдесят) (Шесть) [й]».

person Chris Shain    schedule 23.02.2012
comment
Зависит от вкуса английского языка; немного ОТ, но хотя это технически неверно в современных программах проверки орфографии, примерно с 1860 года написание сорокового встречается в печати и до сих пор является распространенным опечатком, поэтому во всех случаях вам нужно искать сорок, сорок И сороковой при поиске для значений, которые будут равняться числу 40. - person KeithS; 23.02.2012

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

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

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

<---------   <----------
one hundred twenty first
  4       3      2     1
person Kamil    schedule 23.02.2012