亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

整數(shù)與字符串轉(zhuǎn)換的C實(shí)現(xiàn)

作者:龔平   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年03月13日   【字體:

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

 

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

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

整數(shù)到字符串的轉(zhuǎn)換:實(shí)際上就是將一個(gè)整數(shù)的各個(gè)位分離出來(lái),然后實(shí)現(xiàn)字符串的排序問(wèn)題,因?yàn)閿?shù)字長(zhǎng)度的不確定性使得不便于快速的確定字符串的長(zhǎng)度,只能首先分解,然后排序。同時(shí)也需要注意符號(hào)的存在,基本的轉(zhuǎn)換過(guò)程如下:

 

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

        /*參數(shù)檢測(cè)*/
        if(NULL == str)
        {
            return NULL;
        }
       
        /*判斷數(shù)值的正負(fù),設(shè)置對(duì)應(yīng)的符號(hào)*/
        if(num < 0)
        {
            str[i ++] = '-';

            /************************
            同時(shí)要對(duì)數(shù)值取絕對(duì)值
            保證后面取余整除操作正常
            *************************/
            num = -num;
        }
       
        while(num / 10)
        {
            /***************************
            count用來(lái)保存實(shí)際的數(shù)字個(gè)數(shù),
            便于后期的順序調(diào)換
            ****************************/
            ++ count;
            /*實(shí)際保存的順序?yàn)榉葱蛄?/
            str[i++] = num % 10 + 48;
            num /= 10;
        }
        /*判斷是*/
        if(num %10)
        {
            str[i++] = num %10 + 48;
            ++ count;
        }
        /*字符串結(jié)束符*/
        str[i] = 0;
       
        /*實(shí)現(xiàn)數(shù)據(jù)的較好操作*/
        i = 0;
        if(str[0] == '-')
        {
            i = 1;
        }
        /*實(shí)際交換的下標(biāo)區(qū)間為i~j*/
        j = count + i - 1;

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

        /*返回實(shí)際的字符串*/
        return str;
    }

上面的代碼就實(shí)現(xiàn)了字符串與整數(shù)的轉(zhuǎn)換問(wèn)題,基本上實(shí)現(xiàn)了各種情況的轉(zhuǎn)換。

關(guān)閉窗口

相關(guān)文章