Как перевести количество в словах в число - PullRequest
1 голос
/ 10 февраля 2012

Я ищу функцию c #, которая преобразует количество в словах в относительное число.

Например, одну тысячу двадцать пять следует преобразовать в 1025.

Ранняя помощь кого-либо приветствуется.

Ответы [ 3 ]

4 голосов
/ 28 апреля 2016

Протестировал его для работы со строками, содержащими несколько чисел.

Использование: findNumbers («Стоимость составляет пятьсот двадцать девять тысяч триста двадцать шесть долларов двадцать три цента»);

Вывод: «Стоимость составляет 529326 долларов и 23 цента»

    Dictionary<string, string> theNumbers = new Dictionary<string, string>();
    string numstring = "zero=0;one=1;two=2;three=3;four=4;five=5;six=6;seven=7;eight=8;nine=9;ten=10;eleven=11;twelve=12;thirteen=13;fourteen=14;fifteen=15;sixteen=16;seventeen=17;eighteen=18;nineteen=19;twenty=20;thirty=30;fourty=40;fifty=50;sixty=60;seventy=70;eighty=80;ninety=90;hundred=100;thousand=1000;";
    theNumbers = numstring.TrimEnd(';').Split(';').ToDictionary(item => item.Split('=')[0], item => item.Split('=')[1]);
    private string findNumbers(string input)
    {
        string tmp = "", tmpout = "", output = "";
        input = input.Replace("hundred and", "hundred");
        foreach (string word in input.Split(' '))
        {
            if (theNumbers.TryGetValue(word, out tmp))
            {
                if (tmpout != "") tmpout += " ";
                tmpout += tmp;
            } else
            {
                if (tmpout != "") output += " " + addNumbers(tmpout);
                tmpout = "";
                if (output != "") output += " ";
                output += word;
            }
        }
        if (tmpout != "") {
            tmpout = addNumbers(tmpout);
            if (output != "") output += " ";
            output += tmpout;
        }
        return output;
    }
    private string addNumbers(string input)
    {
        int output = 0;
        int output2 = 0;
        foreach (string num in input.Split(' '))
        {
            if (output > 999)
            {
                output2 = output;
                output = 0;
            }
            if (Int32.Parse(num) > 99)
            {
                output = output * Int32.Parse(num);
            } else
            {
                output = output + Int32.Parse(num);
            }
        }
        return (output + output2).ToString();
    }
1 голос
/ 10 февраля 2012

Проверьте ссылку ниже, она написана на Python, но вы можете увидеть логику, если она полезна или нет.

С уважением

Есть ли способ конвертировать числовые слова в целые числа

0 голосов
/ 05 марта 2015

Есть рубиновый камень от Marc Burns, который делает это. Я недавно разветвил это, чтобы добавить поддержку в течение многих лет. Вы можете позвонить код рубина из C # .

...