C# 将序数转换为数字
我正在寻找一个与之相关的解决方案,但恰恰相反 我希望自动执行以下转换: 第一-->第一 第二-->第二 第三-->第三C# 将序数转换为数字,c#,string-conversion,ordinals,C#,String Conversion,Ordinals,我正在寻找一个与之相关的解决方案,但恰恰相反 我希望自动执行以下转换: 第一-->第一 第二-->第二 第三-->第三 第九十九-->第九十九位,依此类推。在英语中,唯一带有特殊术语的数字是1-20,10的倍数是90(20、30、40等),例如“第四十位”(特别令人烦恼,因为它不是“第四十位”)或“第十九位” 如果您分析这些特殊情况,其他所有内容通常都表示为一个数字1212876。。它包括拆分、匹配、一些查找表和一些简单的算法。如果你很幸运有人已经做了,你可以借用他们的解决方案。这取决于英语的味
第九十九-->第九十九位,依此类推。在英语中,唯一带有特殊术语的数字是1-20,10的倍数是90(20、30、40等),例如“第四十位”(特别令人烦恼,因为它不是“第四十位”)或“第十九位”
如果您分析这些特殊情况,其他所有内容通常都表示为一个数字<100 a乘法器,最后一个表达式前有一个可选的“and”,整个短语后有一个“th”,例如“((四)(百))[and](五十)(六)[th]”在我看来,最简单的方法是生成数组(通过使用代码进行正常/非反向转换)查找第一个和第二个数字,然后在该数组中搜索 100之后,只需添加“一百、一千”等 提示:从结尾读单词,朝那个方向读:
<--------- <----------
one hundred twenty first
4 3 2 1
通常,使用数字词词典解析数字最容易做到这一点。这些规则是:
- 将字符串转换为小写,并根据空格、逗号和/或破折号将字符串拆分为单词。删除空条目(对应于相邻的多个分隔符)
- 从字符串的第一个单词开始。这应该是一个与前十九个自然数中的一个相对应的单词——“一”、“二”、“三”、“七”、“十八”、“十九”——或者是“二十”到“九十”之间的十的倍数。请记住,因为你必须考虑序数,你所寻找的数字单词都是前一种形式和在“ST”、“ND”、“RD”或“TH”中结束的形式;不同的是,如果你看到任何单词的顺序版本,你应该这样做。在任何情况下,在预定义的
字典
中查找数字词(希望找到一个值)并包含数字词和相应值后,请记住此数字作为“工作值”
- 现在开始迭代单词。如果下一个单词也是这些自然数单词之一,则将其添加到“工作值”的值中,但不要将该值添加到“运行总数”中
- 如果下一个单词是一个数量级指标(十万亿亿兆),将你的工作价值乘以数量级。然后,“偷看”下一个单词;如果它也是一个OOM单词(主要单词的“十万”,但英式英语也允许“10000000000”作为我们所知的“十亿”的同义词,而一些非常大的口语数字可以通过重复较小的OOM(如“10000000000”)来说),那么保留你拥有的并继续迭代;否则,将当前工作值添加到运行总数中,并在继续之前将工作值归零
- 当您到达数字字符串的最后一个字时,将工作值中的任何内容添加到跑步总数中
您的运行总数现在是刚刚解析的数字单词的数字表示形式。要使其再次成为数字序数,只需调用此数字上的ToString,然后如果一位的值为“1”,则添加“st”,如果是“2”,则添加“nd”,如果是“3”,则添加“rd”,如果是任何其他数字,则添加“th”。执行与链接中所示示例相反的操作。.您尝试过吗。。答案实际上是给你的那可能会变得愚蠢的一百二十一万二千八百七十六->1212876。。它包括拆分、匹配、一些查找表和一些简单的算法。如果你很幸运有人已经做了,你可以借用他们的解决方案。这取决于英语的味道;虽然现代拼写检查在技术上有点不正确,但从1860年开始,拼写“fourtieth”就出现在印刷品中,今天仍然是一种常见的拼写错误,因此在所有情况下,在查找与数字40相等的值时,都必须查找“fourty”、“forteth”和“fourtieth”。