C#將漢字字符換轉換爲阿拉伯數字

遇到要將漢字數字轉換爲阿拉伯數字的要求,於是網上查了一下,發現都是把阿拉伯數字轉換爲漢字的方法,沒有我需要的,沒辦法只好自己寫了,研究了一番算法之後,終於把這個函數給整出來了,原理也很簡單:循環傳入字符串的每一位,判斷是單位還是數字,如果是單位就先存起來,如果是數字就和之前的單位相乘然後存到結果裏,循環一遍結果就出來了,還不明白的可以看代碼註釋.

    /// <summary>
    /// 轉換數字
    /// </summary>
    protected static long CharToNumber(char c)
    {
        switch (c)
        {
            case '一': return 1;
            case '二': return 2;
            case '三': return 3;
            case '四': return 4;
            case '五': return 5;
            case '六': return 6;
            case '七': return 7;
            case '八': return 8;
            case '九': return 9;
            case '零': return 0;
            default: return -1;
        }
    }

    /// <summary>
    /// 轉換單位
    /// </summary>
    protected static long CharToUnit(char c)
    {
        switch (c)
        {
            case '十': return 10;
            case '百': return 100;
            case '千': return 1000;
            case '萬': return 10000;
            case '億': return 100000000;
            default: return 1;
        }
    }
    /// <summary>
    /// 將中文數字轉換阿拉伯數字
    /// </summary>
    /// <param name="cnum">漢字數字</param>
    /// <returns>長整型阿拉伯數字</returns>
    public static long ParseCnToInt(string cnum)
    {
        cnum = Regex.Replace(cnum, "\\s+", "");
        long firstUnit = 1;//一級單位                
        long secondUnit = 1;//二級單位 
        long tmpUnit = 1;//臨時單位變量
        long result = 0;//結果
        for (int i = cnum.Length - 1; i > -1; --i)//從低到高位依次處理
        {
            tmpUnit = CharToUnit(cnum[i]);//取出此位對應的單位
            if (tmpUnit > firstUnit)//判斷此位是數字還是單位
            {
                firstUnit = tmpUnit;//是的話就賦值,以備下次循環使用
                secondUnit = 1;
                if (i==0)//處理如果是"十","十一"這樣的開頭的
                {
                    result += firstUnit * secondUnit;
                }
                continue;//結束本次循環
            }
            else if (tmpUnit > secondUnit)
            {
                secondUnit = tmpUnit;
                continue;
            }
            result += firstUnit * secondUnit * CharToNumber(cnum[i]);//如果是數字,則和單位想乘然後存到結果裏
        }
        return result;
    }

執行ParseCnToInt("一千二百三十五")結果爲1235

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章