2013-02-25 84 views
0

我在編程新手,我開始與目標C作爲我的第一語言。 我與一些書籍和教程瞎搞,最後編程計算器... 樣樣精,我進入(程序能使真的很好玩)在中國文字數字轉換爲阿拉伯數字

現在我問自己,我怎麼能阿拉伯數字,以中國翻譯數字 (例如阿拉伯4是中國四和圖8是八,這意味着四+四=八 中國的數字系統是一種比阿拉伯的不同他們有100,1000,10000體徵和JA種扭曲,這螺絲了我的大腦......反正做任何人有一些建議,提示,技巧和解決方案,我怎麼能告訴計算機如何使用這個號碼正常工作,甚至如何與他們計算?

我覺得everyth ING是可能的,所以我不會問

+1

[你有什麼試過的?](http://whathaveyoutried.com) – Sebastian 2013-02-25 21:26:06

+0

MSB,你會用鉛筆和紙做什麼?如果你還沒有想出如何用鉛筆和紙做這件事,那麼你還沒有準備好用編程語言去做。 – Joe 2013-02-25 21:46:17

+0

@塞巴斯蒂安我剛完成了我的calc tut,將NSString stringWithFormat改爲例如:「@」%@四「,...現在閱讀關於」枚舉「 – MSB 2013-02-25 21:50:28

回答

2

考慮到中國的數字系統(北京話),如維基百科,其中例如描述「如果它甚至有可能?」:

  • 45被解釋爲[4] [ 10] [5]和寫入四十五
  • 114被解釋爲[1] [100] [1] [10] [4]和寫入一百一十四

所以關鍵是要分解一個數作爲10的冪:

x = c(k)* 10^k + ... + c(1)* 10 + c(0)

其中k是10的最大冪數除以x使得商至少爲1.在上面的第二實施例,114 = 1×10^2 + 1 * 10 + 4

此X = C(K)* 10^K + ... + C(1)* 10 + C (0)變成[c(k)][10^k]...[c(1)][10][c(0)]。在該第二示例中再次,114 = [1] [100] [1] [10] [4]。

然後,每個數托架內映射到相應的正弦圖:

0 =〇

1 =一

2 =二

3 =三

4 =四

5 =五

6 =六

7 =七

8 =八

9 =九

10 =十

100 =百

1000 =千

10000 =萬

只要你跟蹤[c(k)][10^k]...[c(1)][10][c(0)]表格,很容易轉換爲計算機可以處理的整數或相應的中文數字。所以這是我將存儲在一個大小爲k + 2的整數數組中的[c(k)][10^k]...[c(1)][10][c(0)]表單。

+0

t甚至沒有開始考慮所有例外 – K48 2017-09-18 07:12:43

+0

不,這個答案是一個起點。但是,列舉所有例外的一個很好的參考是有用的。 – 2017-09-29 20:30:26

1

我對Objective-C不熟悉,因此我無法幫助您使用iOS的解決方案。 儘管如此,以下是適用於Android的Java代碼... 我認爲它可以幫助您,以及它對我有幫助。

double text2double(String text) { 


    String[] units = new String[] { "〇", "一", "二", "三", "四", 
      "五", "六", "七", "八", "九"}; 

    String[] scales = new String[] { "十", "百", "千", "萬", 
      "億" }; 

    HashMap<String, ScaleIncrementPair> numWord = new HashMap<String, ScaleIncrementPair>(); 

    for (int i = 0; i < units.length; i++) { 
     numWord.put(units[i], new ScaleIncrementPair(1, i)); 
    } 

    numWord.put("零", new ScaleIncrementPair(1, 0)); 
    numWord.put("兩", new ScaleIncrementPair(1, 2)); 

    for (int i = 0; i < scales.length; i++) { 
     numWord.put(scales[i], new ScaleIncrementPair(Math.pow(10, (i + 1)), 0)); 
    } 

    double current = 0; 
    double result = 0; 

    for (char character : text.toCharArray()) { 

     ScaleIncrementPair scaleIncrement = numWord.get(String.valueOf(character)); 
     current = current * scaleIncrement.scale + scaleIncrement.increment; 
     if (scaleIncrement.scale > 10) { 
      result += current; 
      current = 0; 
     } 
    } 

    return result + current; 
} 

class ScaleIncrementPair { 
    public double scale; 
    public int increment; 

    public ScaleIncrementPair(double s, int i) { 
     scale = s; 
     increment = i; 
    } 
} 
0

您可以使用NSNumberFormatter

像下面的代碼,首先從漢字中得到NSNumber,然後合併它們。

func getNumber(fromText text: String) -> NSNumber? { 
    let locale = Locale(identifier: "zh_Hans_CN") 
    let numberFormatter = NumberFormatter() 
    numberFormatter.locale = locale 
    numberFormatter.numberStyle = .spellOut 
    guard let number = numberFormatter.number(from: text) else { return nil } 
    print(number) 
    return number 
}