2012-02-23 80 views
0

我正在尋找一個與Is there an easy way to create ordinals in C#?有點相關的解決方案,但是相反。將序號轉換爲數字

我想自動執行以下轉換:

第一 - > 1

二 - >第二

三 - > 3

九十九屆 - >第99等等。

+1

做與你在鏈接中顯示的例子相反......你試過了..答案實際上是給你的.. – MethodMan 2012-02-23 17:45:18

+0

這可能會愚蠢的一百二十一萬二千八百七十七 - 第六 - >第1212876th ..它是分裂,匹配,幾個查找表和一些簡單的算術。如果你幸運的話,人們已經做到了,而且你可以'借用他們的解決方案。 – 2012-02-23 17:53:31

回答

0

英文中,唯一有特殊術語的數字是1-20,10的倍數是90(20,30,40等),例如「第四十」(特別是因爲它不是「第四十」)或「第十九」而令人煩惱。

如果爲這些特殊情況解析,其他所有內容通常用數字< 100乘數,最後一個表達式前的可選「and」以及整個短語後的「th」表示。 「((四)(百))[和](五十)(六)[th]」。

+0

取決於英語的味道;有點過分,但在現代拼寫檢查中在技術上是不正確的,因爲大約在1860年拼寫「第四十四」已經出現在印刷品中,並且仍然是今天常見的錯誤拼寫,所以在所有情況下,你必須尋找「四十」,「第四十「和」第四十「時,尋找值相當於40。 – KeithS 2012-02-23 18:19:24

0

在我看來最簡單的方法是生成數組(通過使用正常/非反向轉換的代碼)的第一個和第二個數字,然後搜索該數組。

100後,您只需要添加「百,千」等

提示:從終端讀單詞,在這個方向:

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

一般來說,這是最容易做通過使用數字字典的詞典解析數字。規則如下:

  • 將字符串轉換爲小寫,並將字符串拆分爲基於空格,逗號和/或破折號的單詞。刪除空條目(對應於相鄰的多個分隔符)。

  • 從字符串的第一個單詞開始。這應該是與前19個自然數中的一個相對應的詞 - 「一」,「二」,「三」,...,「十七」,「十八」,「十九」 - 或者「二十「到」九十「。請記住,因爲你必須考慮序數,所以你要查找的數字既是前面的形式,也是以「st」,「nd」,「rd」或「th」結尾的形式;不同的是,如果你看到任何單詞的序數版本,你應該完成。在任何情況下,在包含您的數字和相應值的預定義Dictionary<string, int>中查找了數字(並希望找到一個值)之後,請記住此數字作爲「工作值」。

  • 現在開始迭代單詞。如果下一個單詞也是這些自然數字中的一個,請將其添加到「工作值」的值中,但不要將該值添加到「運行總計」中。

  • 如果下一個單詞是一個數量級的指標(百萬,億,億,萬億),請將您的工作值乘以數量級。然後,在下一個單詞「窺視」;如果它也是OOM詞(主詞的「十萬」),但英國英語也允許「十億」作爲我們所知的「十億」的同義詞,並且一些非常大的說話數字可以用重複較小的OOM像「百萬美元」),保持你擁有的並繼續迭代;否則,將您當前的工作價值添加到運行總額中,並在繼續之前將您的工作價值歸零。

  • 當您達到數字字符串的最後一個單詞時,將您工作值中的任何值添加到您的運行總數中。

您的跑步總數現在是您剛解析的數字的數字表示。爲了使它成爲一個數字序數,只需在這個數字上調用ToString,然後如果它的值爲'1',則添加「st」,如果是'2'則添加'nd',如果是'3'則添加'rd'或'th',如果它是任何其他數字。