在中国文字数字转换为阿拉伯数字
我在编程新手,我开始与目标C作为我的第一语言。 我与一些书籍和教程瞎搞,最后编程计算器... 样样精,我进入(程序能使真的很好玩)在中国文字数字转换为阿拉伯数字
现在我问自己,我怎么能阿拉伯数字,以中国翻译数字 (例如阿拉伯4是中国四和图8是八,这意味着四+四=八 中国的数字系统是一种比阿拉伯的不同他们有100,1000,10000体征和JA种扭曲,这螺丝了我的大脑......反正做任何人有一些建议,提示,技巧和解决方案,我怎么能告诉计算机如何使用这个号码正常工作,甚至如何与他们计算?
我觉得everyth ING是可能的,所以我不会问
考虑到中国的数字系统(北京话),如维基百科,其中例如描述“如果它甚至有可能?”:
- 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)]
表单。
t甚至没有开始考虑所有例外 – K48 2017-09-18 07:12:43
不,这个答案是一个起点。但是,列举所有例外的一个很好的参考是有用的。 – 2017-09-29 20:30:26
我对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;
}
}
您可以使用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
}
[你有什么试过的?](http://whathaveyoutried.com) – Sebastian 2013-02-25 21:26:06
MSB,你会用铅笔和纸做什么?如果你还没有想出如何用铅笔和纸做这件事,那么你还没有准备好用编程语言去做。 – Joe 2013-02-25 21:46:17
@塞巴斯蒂安我刚完成了我的calc tut,将NSString stringWithFormat改为例如:“@”%@四“,...现在阅读关于”枚举“ – MSB 2013-02-25 21:50:28