• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C小加

            厚德 博學(xué) 求真 至善 The bright moon and breeze
            posts - 145, comments - 195, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            //函數(shù)名:myatof
            //功能:把字符串轉(zhuǎn)化成double浮點(diǎn)型
            //名字來(lái)源:my array to floating point numbers  
            //函數(shù)說(shuō)明:接收一個(gè)字符串判斷第一個(gè)字符的符號(hào),沒有符號(hào)默認(rèn)為正值,然后對(duì)剩余字符串進(jìn)行轉(zhuǎn)換,//遇到\0結(jié)束,最后返回一個(gè)double

            double myatof(const char* sptr)
            {
                double temp=10;
                bool ispnum=true;
                double ans=0;
                if(*sptr=='-')//判斷是否是負(fù)數(shù)
                {
                    ispnum=false;
                    sptr++;
                }
                else if(*sptr=='+')//判斷是否為正數(shù)
                {
                    sptr++;
                }

                while(*sptr!='\0')//尋找小數(shù)點(diǎn)之前的數(shù)
                {
                    if(*sptr=='.'){ sptr++;break;}
                    ans=ans*10+(*sptr-'0');
                    sptr++;
                }
                while(*sptr!='\0')//尋找小數(shù)點(diǎn)之后的數(shù)
                {
                    ans=ans+(*sptr-'0')/temp;
                    temp*=10;
                    sptr++;
                }
                if(ispnum) return ans;
                else return ans*(-1);
            }

            //函數(shù)名:myatoi
            //功能:把字符串轉(zhuǎn)化成int整型
            //名字來(lái)源:my array to integer  
            //函數(shù)說(shuō)明:接收一個(gè)字符串判斷第一個(gè)字符的符號(hào),沒有符號(hào)默認(rèn)為正值,然后對(duì)剩余字符串進(jìn)行轉(zhuǎn)換,//遇到\0結(jié)束,最后返回一個(gè)int

            int myatoi(const char* sptr)
            {

                bool ispnum=true;
                int ans=0;
                if(*sptr=='-')//判斷是否是負(fù)數(shù)
                {
                    ispnum=false;
                    sptr++;
                }
                else if(*sptr=='+')//判斷是否為正數(shù)
                {
                    sptr++;
                }

                while(*sptr!='\0')//類型轉(zhuǎn)化
                {
                    ans=ans*10+(*sptr-'0');
                    sptr++;
                }

                if(ispnum) return ans;
                else return ans*(-1);
            }

            Feedback

            # re: 自己實(shí)現(xiàn)的atof()和atoi()代碼[未登錄]  回復(fù)  更多評(píng)論   

            2012-02-24 19:53 by ithaca
            沒有處理前置的空白,這個(gè)功能,標(biāo)準(zhǔn)的atoi都是要有的。

            # re: 自己實(shí)現(xiàn)的atof()和atoi()代碼  回復(fù)  更多評(píng)論   

            2012-02-25 21:24 by ko
            正數(shù)不一定非要用 + 占位吧

            # re: 自己實(shí)現(xiàn)的atof()和atoi()代碼  回復(fù)  更多評(píng)論   

            2012-02-27 09:10 by C小加
            遇到+了怎么辦@ko

            # re: 自己實(shí)現(xiàn)的atof()和atoi()代碼  回復(fù)  更多評(píng)論   

            2013-11-09 11:25 by danielyin
            atoi沒有考慮溢出的問題。

            # re: 自己實(shí)現(xiàn)的atof()和atoi()代碼  回復(fù)  更多評(píng)論   

            2014-09-05 22:27 by memristor
            定義函數(shù) double atof(const char *nptr);
            函數(shù)說(shuō)明 atof()會(huì)掃描參數(shù)nptr字符串,跳過(guò)前面的空格字符,直到遇上數(shù)
            字或正負(fù)符號(hào)才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時(shí)
            ('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。參數(shù)nptr字符串可包含正負(fù)
            號(hào)、小數(shù)點(diǎn)或E(e)來(lái)表示指數(shù)部分,如123.456或123e-2。
            返回值 返回轉(zhuǎn)換后的浮點(diǎn)型數(shù)。
            #include <stdio.h>
            #include <ctype.h>
            #include <math.h>
            #include <stdlib.h>
            #include <assert.h>


            double myatof(const char*s)
            {
            assert(s!=NULL);
            double val,val2,power;
            int sign,sign2,i;
            //去掉字符串中的空格
            for(i=0;isspace(s[i]);++i)
            ;
            //判斷正負(fù)數(shù) ,并將i指向下一個(gè)位置
            sign = (s[i] == '-') ? -1:1;
            if(s[i] == '+' || s[i] == '-')
            i++;
            //取浮點(diǎn)數(shù)的整數(shù)部分
            for(val=0.0;isdigit(s[i]) && s[i] !=0;++i)
            val = 10*val+s[i]-'0';
            //取小數(shù)點(diǎn)
            if(s[i] == '.')
            i++; //后一個(gè)位置
            //取小數(shù)點(diǎn)后面數(shù)
            for(power=1.0;isdigit(s[i]) && s[i] !=0;++i)
            {
            val = 10*val+s[i]-'0';
            power*=10; //float 放大的倍數(shù)
            }
            val=sign*val/power;

            //如果有e的話處理e后面的數(shù)字
            if(s[i]=='e' || s[i]== 'E'){
            i++;
            sign2 = (s[i] == '-')?-1:1;
            if(s[i] == '+' || s[i] == '-')
            i++;
            for(val2=0.0;isdigit(s[i]) && s[i] !=0;++i){
            val2 = 10*val2+s[i]-'0';
            }
            if(sign2 == -1)
            return val/pow(10,val2);
            else
            return val*pow(10,val2);
            }
            return val;
            }
            国产AⅤ精品一区二区三区久久| 精品久久久久久成人AV| 蜜桃麻豆www久久| 国产精品99久久精品爆乳| 久久亚洲精品视频| 久久亚洲精品无码VA大香大香| 久久亚洲AV无码精品色午夜麻豆| 久久久久久久波多野结衣高潮| 久久久久久久久无码精品亚洲日韩| 97热久久免费频精品99| 国产激情久久久久影院老熟女| 思思久久99热免费精品6| 亚洲成色WWW久久网站| 青青青青久久精品国产h| 伊人色综合久久天天网| avtt天堂网久久精品| 久久亚洲熟女cc98cm| 久久精品夜色噜噜亚洲A∨| 中文字幕久久波多野结衣av| 一本久久a久久精品vr综合| 久久综合狠狠综合久久激情 | 狠狠色丁香久久综合婷婷| 国产亚州精品女人久久久久久 | 久久精品www人人爽人人| 久久影院午夜理论片无码| 国产精品女同久久久久电影院| 99国内精品久久久久久久 | 久久这里都是精品| 久久久久亚洲AV综合波多野结衣 | 亚洲综合日韩久久成人AV| 久久国产精品偷99| 99久久精品国产一区二区三区| 少妇无套内谢久久久久| 久久无码国产| 久久久久亚洲AV综合波多野结衣| 国产亚洲婷婷香蕉久久精品| 久久毛片一区二区| 99蜜桃臀久久久欧美精品网站| 国产精品成人久久久| 亚洲国产精品一区二区三区久久| 99久久精品免费看国产|