久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

整數與字符串轉換的C實現

作者:龔平   來源:本站原創   點擊數:  更新時間:2014年03月13日   【字體:

即將就業,也復習復習相關的知識,看了看嵌入式C的筆試題,整體感覺考試題目還是蠻有意思的,考點都比較重要,而且比較細,主要還是設計到一些指針和數組已經函數指針等基本的概念。
比如:
如何實現兩個值中的最大值:((a+b) + abs(a-b))/2
如何實現不依靠中間量實現兩個變量值的交換:
a = a + b;
b = a - b;
a = a - b;
或者
a = a^b;
b = a^b;
a = a^b;
其中后面的這種方式更加的優越。
 
sizeof與strlen的區別
其中sizeof是一個操作符,在編譯過程中就能確定結果,但是strlen是一個函數,只有在運行的時候才能得到返回值。
 
指針、數組、函數等各種形式的指針結合起來也是出題的重點。
 
在編程中主要是設計到字符串、鏈表的處理問題,我就找幾個簡單的程序當做練兵吧。實現整數和字符串之間的轉換問題。這個轉換問題實質上是處理好ASCII碼與數字之間的切換關系,即數字的ASCII碼形式為‘0’= 0 + 48; ‘9’= 9 + 48;0 = '0'-48。
這個關系是轉換過程中最主要的問題,當然整數到字符串的轉換過程中需要注意負數的影響,如果負數沒有正確處理,就可能出現一些莫名其妙的結果。
 
首先實現字符串到整數的轉換過程:這個過程相對來說比較容易,因為這個過程可直接判斷是正數還是負數,直接判斷下標0對應的內容即可,其他的可以通過逐步求和累加的形式實現。基本的轉換過程如下:

 

    int myatoi(char *src)
    {
        char flag = 0;
        int sum = 0;
        int i = 0;
        int len = strlen(src);
       
        /*參數的正確性*/
        if(NULL == src)
        {
            return 0;
        }
       
        /*是否存在符號問題*/
        if(src[i] == '-')   
        {
            flag = '-';
            ++ i ;
        }

        for( ; i < len ; ++ i)
        {
            /*判斷字符是否合法*/
            if(src[i] < 48 && src[i] > 57)
                return 0;
           
            /*數據求和,注意數值的轉換問題src[i] - 48*/
            sum = sum *10 + src[i] - 48;
        }
       
        /*根據標志位實現返回正確的正負數*/
        if(flag == '-')
            return -sum;
        else
            return sum;
    }

整數到字符串的轉換:實際上就是將一個整數的各個位分離出來,然后實現字符串的排序問題,因為數字長度的不確定性使得不便于快速的確定字符串的長度,只能首先分解,然后排序。同時也需要注意符號的存在,基本的轉換過程如下:

 

    char* myitoa(int num, char *str)
    {
        char flag = 0;
        int i = 0, count = 0, j = 0;

        /*參數檢測*/
        if(NULL == str)
        {
            return NULL;
        }
       
        /*判斷數值的正負,設置對應的符號*/
        if(num < 0)
        {
            str[i ++] = '-';

            /************************
            同時要對數值取絕對值
            保證后面取余整除操作正常
            *************************/
            num = -num;
        }
       
        while(num / 10)
        {
            /***************************
            count用來保存實際的數字個數,
            便于后期的順序調換
            ****************************/
            ++ count;
            /*實際保存的順序為反序列*/
            str[i++] = num % 10 + 48;
            num /= 10;
        }
        /*判斷是*/
        if(num %10)
        {
            str[i++] = num %10 + 48;
            ++ count;
        }
        /*字符串結束符*/
        str[i] = 0;
       
        /*實現數據的較好操作*/
        i = 0;
        if(str[0] == '-')
        {
            i = 1;
        }
        /*實際交換的下標區間為i~j*/
        j = count + i - 1;

        for(; i < j ; ++ i, --j)
        {
            /*數據的較好操作*/
            str[i] = str[i] + str[j];
            str[j] = str[i] - str[j];
            str[i] = str[i] - str[j];
        }

        /*返回實際的字符串*/
        return str;
    }

上面的代碼就實現了字符串與整數的轉換問題,基本上實現了各種情況的轉換。

關閉窗口

相關文章

主站蜘蛛池模板: 91.色| 中文字幕三区 | 日韩欧美国产成人一区二区 | 亚洲精品美女视频 | 国产激情一区二区三区 | 日韩欧美在线一区 | 成人性生交大片免费看r链接 | 日本精品视频一区二区 | 日韩在线观看网站 | 国产高清一区二区三区 | 色吧色综合| 超碰在线人 | 亚洲精品国产电影 | 欧美精选一区二区 | 日本久久www成人免 成人久久久久 | 午夜免费电影 | 九色www| 玖操| 日韩中文字幕一区二区 | 亚洲444kkkk在线观看最新 | 国产精品国产三级国产aⅴ中文 | 国产麻豆一区二区三区 | 欧美成人精品一区二区男人看 | 欧美视频中文字幕 | 久久久久一区二区三区 | 精品久久亚洲 | 亚洲三区视频 | 欧美性久久 | 一级看片免费视频囗交动图 | 日韩精品一区二区三区中文在线 | 国产精品96久久久久久 | 国产成人高清视频 | 91社区在线高清 | 狠狠色综合久久丁香婷婷 | 99爱在线免费观看 | 一区二区三区四区在线免费观看 | 亚洲一区二区网站 | 国产精品高清在线 | 青青久久 | 久久久久久久久中文字幕 | 99视频免费在线 |