2013-02-25 83 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 
}