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

本函数my_atoi与C标准库函数atoi相同,测试代码中与atoi比较输出结果。

#include <iostream>

#include <cstdlib>
#include <string>
#include <stdlib.h>
#include <ctype.h>
#include <string>
#include <list>

using namespace std;

//  atoi

int my_atoi ( const char * str )
{
    int flag = 1; //for minus or positive
    int result = 0;
    if(str)
    {
        while( *str )
        {
            if(( '-'==*str ) || ( '+'==*str))
            {
               flag = ( '-'==*str ) ? -1 : 1 ;
               while( isspace(*(++str)) );
            }
            if( isdigit(*str) )
            {
               break;
            }
            str++;
        }
        if(*str)
        {
            do{
               result =result * 10 -'0' + *str;
            }while( isdigit(*(++str)) );

            result *= flag;
        }
    }
    return result;
}

int main(int argc, char *argv[])
{
  list<string> li;
  li.push_back("0");
  li.push_back("123");
  li.push_back("-12");
  li.push_back("1 ");
  li.push_back("1235k344");
  li.push_back("  -1234");
  li.push_back("  - 123");
  li.push_back(" -    1234"); // \t
  li.push_back("1000000000000000000000000000");
  li.push_back("1a");
  li.push_back("-");

  for(list<string>::iterator it = li.begin(); it != li.end(); it++)
  {
      cout <<"input = "<<*it
           << ", atio() = " <<atoi(it->c_str())
           <<", my_atio() = " << my_atoi(it->c_str())<<endl;
  }

  return 0;
}

posted on 2010-05-06 07:29  zhihuichien  阅读(499)  评论(0编辑  收藏  举报

导航