Как преобразовать числа хинди ( २०७४) в числовое значение в C#?

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

например. преобразовать это число equivalent в эквивалент 2074

1 ответ

Решение

Я считаю, что это то, что вам нужно, но имейте в виду, что этот код написан кем-то, кто не говорит на хинди, не читает хинди или не знает хинди.

Я нашел цифры на странице википедии, но я абсолютно не знаю, что я делаю.

Страница Google (которую я обнаружил, просто набрав в поиске отдельные цифры из исходной строки вопроса), показывает следующее:

  • Цифры от 0 до 9 ०१२३४५६७८९
    • Я нажал на ссылку и использовал последний символ URL в качестве цифры
    • Обратите внимание, что 4 должно быть получено как вторая цифра 14, и, похоже, в этой ссылке также имеется суффикс неоднозначности
  • Они имеют кодовые точки Unicode в диапазоне от 2406 до 2415, в этом порядке
  • Двузначные числа следуют за системой до тройника, так что, похоже, это просто 10-значная цифровая система, использующая разные кодовые точки
    • Но учтите, что примеров для меня слишком мало, чтобы быть абсолютно уверенным, что это верно для всех чисел

Если кто-то найдет ответ в этом ответе, я его опущу, но не стесняйтесь сначала взять весь код, если вы считаете, что его можно улучшить.

Также имейте в виду, что ФП явно попросил метод без замены. Все это, вероятно, может быть написано в единственном числе с этим, но так как это не кажется приемлемым ответом, то мы здесь.

С учетом всего вышесказанного, вот версия без замены строки, которая имитирует базовый числовой анализ с использованием различных символов:

Примечание: здесь имеется около 7 тонн обработки ошибок, таких как пустые строки и т. Д.

public static bool TryParseHindiToInt32(string text, out int value)
{
    const int codePointForZero = 2406;
    const int codePointForNine = codePointForZero + 9;

    int sign = +1;

    int index = 0;
    if (index < text.Length && text[index] == '-') // todo: hindi minus?
    {
        index++;
        sign = -1;
    }

    value = 0;
    while (index < text.Length)
    {
        char c = text[index];
        if (c < codePointForZero || c > codePointForNine)
        {
            value = 0;
            return false;
        }

        if ((uint)value > 214748364u)
        {
            value = 0;
            return false;
        }

        value *= 10;
        value += (c - codePointForZero);
        index++;
    }

    value *= sign;
    return true;
}

Тестовое задание:

string digits = "२०७४";
TryParseHindiToInt32(digits, out int i);
Console.WriteLine(i);

Выходы:

2074
Другие вопросы по тегам