c# - 有没有一种简单的方法可以将序数数字字符串转换为其匹配的数值?

标签 c# string algorithm numeric ordinals

有谁知道将“first”、“tenth”和“one hundredth”等词转换为等价数字的方法吗?

样本: “第一”-> 1, “第二个”-> 2, “第十”-> 10, “百分之一”-> 100

任何算法都可以,但我是用 C# 编写的。

编辑

它不是很漂亮,一次只能用一个词,但它适合我的目的。也许有人可以改进它,但我没时间了。

 public static int GetNumberFromOrdinalString(string inputString)
    {
        string[] ordinalNumberWords = { "", "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth", "sixteenth", "seventeenth", "eighteenth", "nineteenth", "twentieth" };
        string[] ordinalNumberWordsTens = { "", "tenth", "twentieth", "thirtieth", "fortieth", "fiftieth", "sixtieth", "seventieth", "eightieth", "ninetieth" };
        string[] ordinalNumberWordsExtended = {"hundredth", "thousandth", "millionth", "billionth" };

        if (inputString.IsNullOrEmpty() || inputString.Length < 5 || inputString.Contains(" ")) return 0;

        if (ordinalNumberWords.Contains(inputString) || ordinalNumberWordsTens.Contains(inputString))
        {
            var outputMultiplier = ordinalNumberWords.Contains(inputString) ? 1 : 10;
            var arrayToCheck = ordinalNumberWords.Contains(inputString) ? ordinalNumberWords : ordinalNumberWordsTens;

            // Use the loop counter to get our output integer.
            for (int x = 0; x < arrayToCheck.Count(); x++)
            {
                if (arrayToCheck[x] == inputString)
                {
                    return x * outputMultiplier;
                }
            }
        }

        // Check if the number is one of our extended numbers and return the appropriate value.
        if (ordinalNumberWordsExtended.Contains(inputString))
        {
            return inputString == ordinalNumberWordsExtended[0] ? 100 : inputString == ordinalNumberWordsExtended[1] ? 1000 : inputString == ordinalNumberWordsExtended[2] ? 1000000 : 1000000000;
        }

        return 0;
    }

最佳答案

除了我知道“和”这个词应该是从整数到小数的过渡之外,我从来没有考虑过这么多。喜欢

一百九十九美元十美分

不是

一百九十九美元。

无论如何,任何潜在的解决方案都必须解析输入字符串,引发任何异常或以其他方式返回值。

但首先你必须知道“规则”这似乎是非常武断的并且基于传统,但这位先生似乎是一个很好的起点:

Ask Dr. Math

关于c# - 有没有一种简单的方法可以将序数数字字符串转换为其匹配的数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818244/

相关文章:

c# - 在 C# 中将 Html 存储到字符串中

algorithm - 使用哈密尔顿循环函数和相反任务的哈密顿寻路

algorithm - 使用不同大小的正方形寻找最佳平铺策略

c# - 如何将 public void PassValue(string) 中的文本调用到 private void Form1_Load()

c# - 创建接口(interface)实例

c# - Entity Framework 渴望加载多级异常

c# - 如何检查 C# 中的字谜字符串

c++ - 通过空格将字符串解析为 vector

multithreading - 设计一个hash_table,应该注意几个方面?

c# - WPF/Prism : What is a UNITY Container?