2016年8月24日 星期三

文字轉成數字

工作上轉換資料遇到一個資料排序是這樣的:

01,..,99,A0,..A9,AA,..AZ,Aa,..,Az,B0,..B9,BA,..BZ,Ba,..Bz,...其餘以此類推,最大只到Zz。這個資料固定只有2位長度。

任務是把這些文字項的資料,全部轉成數字項。

用最笨的方法 - 列舉對照法,那你的程式看起來會非常、非常地壯觀,千萬不要這樣做,雖然解得出來,但是不美,也沒有效率。

最好的方式就是用運算法,把這個值換算出來,程式如下:

        private int convert_string(string s)
        {
            int j = 0;
            int k = 0;

            s = s.Trim();
            if (s.Length == 1) //若長度為1
            {
                k = (int)s[0];
                if (k >= 97 && k <= 122)
                    j = k - 61;
                else if (k >= 65 && k <= 90)
                    j = k - 55;
                else if (k >= 48 && k <= 57)
                    j = k - (int)'0';
            }
            else if (s.Length == 2) //若長度為2
            {
                k = (int)s[0];
                if (k >= 97 && k <= 122)
                    j = (k - (int)'A' - 6) * 62 + 100;
                else if (k >= 65 && k <= 90)
                    j = (k - (int)'A') * 62 + 100;
                else if (k >= 48 && k <= 57)
                    j = (k - (int)'0') * 10;

                k = (int)s[1];
                if (k >= 97 && k <= 122)
                    j += k - 61;
                else if (k >= 65 && k <= 90)
                    j += k - 55;
                else if (k >= 48 && k <= 57)
                    j += k - (int)'0';
            }
            return j;
        }

是否有一種「庖丁解牛」的感覺?千萬不要執著於資料的表面。有時候,用最快速、最直覺的方式解題,並不是最好的解法。

沒有留言:

張貼留言