• <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小加

            厚德 博學 求真 至善 The bright moon and breeze
            posts - 145, comments - 195, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            自己實現的atof()和atoi()代碼

            Posted on 2012-02-24 16:42 C小加 閱讀(8315) 評論(5)  編輯 收藏 引用 所屬分類: C++和面向對象
            //函數名:myatof
            //功能:把字符串轉化成double浮點型
            //名字來源:my array to floating point numbers  
            //函數說明:接收一個字符串判斷第一個字符的符號,沒有符號默認為正值,然后對剩余字符串進行轉換,//遇到\0結束,最后返回一個double

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

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

            //函數名:myatoi
            //功能:把字符串轉化成int整型
            //名字來源:my array to integer  
            //函數說明:接收一個字符串判斷第一個字符的符號,沒有符號默認為正值,然后對剩余字符串進行轉換,//遇到\0結束,最后返回一個int

            int myatoi(const char* sptr)
            {

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

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

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

            Feedback

            # re: 自己實現的atof()和atoi()代碼[未登錄]  回復  更多評論   

            2012-02-24 19:53 by ithaca
            沒有處理前置的空白,這個功能,標準的atoi都是要有的。

            # re: 自己實現的atof()和atoi()代碼  回復  更多評論   

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

            # re: 自己實現的atof()和atoi()代碼  回復  更多評論   

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

            # re: 自己實現的atof()和atoi()代碼  回復  更多評論   

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

            # re: 自己實現的atof()和atoi()代碼  回復  更多評論   

            2014-09-05 22:27 by memristor
            定義函數 double atof(const char *nptr);
            函數說明 atof()會掃描參數nptr字符串,跳過前面的空格字符,直到遇上數
            字或正負符號才開始做轉換,而再遇到非數字或字符串結束時
            ('\0')才結束轉換,并將結果返回。參數nptr字符串可包含正負
            號、小數點或E(e)來表示指數部分,如123.456或123e-2。
            返回值 返回轉換后的浮點型數。
            #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)
            ;
            //判斷正負數 ,并將i指向下一個位置
            sign = (s[i] == '-') ? -1:1;
            if(s[i] == '+' || s[i] == '-')
            i++;
            //取浮點數的整數部分
            for(val=0.0;isdigit(s[i]) && s[i] !=0;++i)
            val = 10*val+s[i]-'0';
            //取小數點
            if(s[i] == '.')
            i++; //后一個位置
            //取小數點后面數
            for(power=1.0;isdigit(s[i]) && s[i] !=0;++i)
            {
            val = 10*val+s[i]-'0';
            power*=10; //float 放大的倍數
            }
            val=sign*val/power;

            //如果有e的話處理e后面的數字
            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;
            }
            99热热久久这里只有精品68| 亚洲人成无码www久久久 | 久久综合久久伊人| 99久久精品国产一区二区| 国产欧美久久一区二区| AV狠狠色丁香婷婷综合久久 | 狠狠色婷婷久久综合频道日韩| 久久久久久国产精品免费免费| 国产成人99久久亚洲综合精品| 办公室久久精品| 久久久91人妻无码精品蜜桃HD| 久久九色综合九色99伊人| 欧美亚洲日本久久精品| 国产精品久久新婚兰兰| 青草国产精品久久久久久| 久久精品aⅴ无码中文字字幕重口| 亚洲AV日韩精品久久久久| 久久久久亚洲av无码专区导航| 狠狠色丁香久久综合婷婷| 青青草国产精品久久久久| 精品国产婷婷久久久| 少妇被又大又粗又爽毛片久久黑人 | AV狠狠色丁香婷婷综合久久| 91精品国产91久久综合| 久久99精品国产麻豆蜜芽| 久久久久精品国产亚洲AV无码| 久久精品无码免费不卡| 亚洲国产另类久久久精品| 国内精品久久九九国产精品| 狠狠色伊人久久精品综合网| 色8激情欧美成人久久综合电| 无码伊人66久久大杳蕉网站谷歌| 精品久久777| 中文字幕精品久久久久人妻| 久久精品中文无码资源站| 国产免费久久精品99久久| 亚洲国产精品久久电影欧美| 国产A级毛片久久久精品毛片| 久久国内免费视频| 99热成人精品免费久久| 久久久亚洲欧洲日产国码aⅴ|