Преобразование ординалов в числа

103
10

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

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

Первый → 1-й

Второй → 2-й

Третий → 3-й

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

спросил(а) 2021-01-14T00:26:57+03:00 2 недели назад
1
Решение
60

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

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

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

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

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

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

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

ответил(а) 2021-01-14T00:26:57+03:00 2 недели назад
42

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


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

ответил(а) 2021-01-14T00:26:57+03:00 2 недели назад
44

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

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

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

<---------   <----------
one hundred twenty first
4 3 2 1

ответил(а) 2021-01-14T00:26:57+03:00 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема