设为首页收藏本站|繁體中文 快速切换版块

 找回密码
 立即加入
搜索
查看: 948|回复: 0

[练习]写一个atoi()函数

[复制链接]
  • TA的每日心情
    慵懒
    2016-4-21 12:07
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    累计签到:3 天
    连续签到:1 天
    发表于 2010-5-6 07:59:55 | 显示全部楼层 |阅读模式

    马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!

    您需要 登录 才可以下载或查看,没有账号?立即加入

    ×
    本函数my_atoi与C标准库函数atoi相同,测试代码中与atoi比较输出结果。
    $ k3 e, E5 R6 Q& I7 f/ h: a#include <iostream>! ?( h& E# d! E, ?1 W
    #include <cstdlib>
    7 a" ?6 T4 G; f) c8 X#include <string>5 a  j( C" r  K7 N3 s
    #include <stdlib.h>
    6 \7 _5 \5 Y0 t. E#include <ctype.h>" D! I# r# H& A$ g/ T( y
    #include <string>
    3 c6 o9 R! r; [0 b# |& }#include <list>
    3 T+ w& r+ U# p9 i. a7 u. k* rusing namespace std;. S6 b2 b; m5 l0 }0 g0 O, T( e
    //  atoi
    2 ?: L$ l8 ~9 h# I! M7 |; lint my_atoi ( const char * str )
    . M* x0 l3 v# x" J9 X{: U7 @# @! i5 _' X, Y
        int flag = 1; //for minus or positive
    + ]3 A& h& k0 E! G+ c    int result = 0;
    : r- e6 V' S% @3 [    if(str)
    0 ?& c( i( u) x8 q. A% ~5 @6 U    {4 ~" g' i) @2 l
            while( *str )
    7 R; ^) x1 _* p        {  p& q$ n; ?, f1 V5 G% A8 H* ^
                if(( '-'==*str ) || ( '+'==*str))
    1 E0 l( X9 h. l, W5 W            {
    0 d7 |4 J. B2 W+ e  z/ Y               flag = ( '-'==*str ) ? -1 : 1 ;
    . T7 a& N8 B8 D+ _% W9 q               while( isspace(*(++str)) );/ o- U% V( g% X/ l
                }1 W" _9 g& j$ w. j5 e1 O; P
                if( isdigit(*str) )  \6 w  r) z. K; O& a' G( w
                {
    # Q5 g' u) f8 w3 n  [& s$ e2 M               break;
    & O( n6 ?/ x7 j  R9 r: G3 U            }
    * E. p9 ^# z8 r6 [            str++;
    % P& r4 e2 s2 |" _        }4 P; p: [0 b, Q
            if(*str)! i' `% K& a( s. A) Y5 N6 \
            {
    / j' [$ B7 t( j0 n( V& n* g            do{& \8 H: s3 U$ x/ h+ y# o. k, N
                   result =result * 10 -'0' + *str;1 t6 m  e: }% ~. f  H: C
                }while( isdigit(*(++str)) );! O% b6 |: Z7 J6 y' R( c) k5 W
                result *= flag;9 a& N2 Y1 P; t! K# c% S9 N
            }
    / c. v7 \" L3 {0 a8 y. H0 r% S    }# Y! v7 [. B* E7 m+ T
        return result;" y9 l+ s3 F+ V6 p$ J. j% r
    }; ?4 F8 `* Q7 q. c$ I( `
    int main(int argc, char *argv[])
    9 z6 K6 u$ ]( j2 X: K; V) U{% p! R+ w; |6 }7 h: ^' H
      list<string> li;/ S% g' }- V% C2 W; u! c6 b. C
      li.push_back("0");+ M/ l' r5 h  E: D0 r8 j
      li.push_back("123");
    ) V0 T' B& r5 M; K* T# w  li.push_back("-12");/ S7 l2 a5 t" B
      li.push_back("1 ");+ q; C; b* P8 G' b) Y; h5 v
      li.push_back("1235k344");
    1 P# g; |) P" x. C8 F" r+ |  li.push_back("  -1234");. G' ~$ [" @! C; b8 H4 r
      li.push_back("  - 123");9 x" f0 n. e* d" a
      li.push_back(" -    1234"); // \t
    $ n7 |7 C9 H' ~- D6 ]! c, q, k  li.push_back("1000000000000000000000000000");# {+ {2 Z5 b- u: o5 \+ T9 S( z
      li.push_back("1a");4 _4 E% J7 @& m
      li.push_back("-");
    , O2 n% k4 Q( c6 I# T; n0 G  for(list<string>::iterator it = li.begin(); it != li.end(); it++)
    5 s7 x! {3 D, f: l1 c6 r  {
    ( {( T& m  W5 C7 _" E: n2 y1 W      cout <<"input = "<<*it
    1 H9 |0 q5 q2 O% ?* L- V           << ", atio() = " <<atoi(it->c_str())
    ( Q+ y3 [9 d! ^7 w: p8 l. S           <<", my_atio() = " << my_atoi(it->c_str())<<endl;- P/ U/ r0 X" w) ]
      }. v& I' A% F1 b' m
      return 0;2 ~4 Y1 @. I4 p6 n8 ^, h
    }
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
    您需要登录后才可以回帖 登录 | 立即加入

    本版积分规则

    招聘斑竹

    小黑屋|手机版|APP下载(beta)|Archiver|电力研学网 ( 赣ICP备12000811号-1|赣公网安备36040302000210号 )|网站地图

    GMT+8, 2026-10-10 02:58

    Powered by Discuz! X3.5 Licensed

    © 2001-2026 Discuz! Team.

    快速回复 返回顶部 返回列表