• 【C++ Primer】自己动手编写函数 atoi(char *str)


    一,要求:自己动手编写 atoi(char *str)函数,功能是将字符串变成数字

     

    简单版本:

                     需要考虑的地方 1)正负号

                                                   2)仅仅考虑十进制

                                                   3)如何把数字 字符 变成整数

     

    #include <iostream>
    using namespace std;
    
    int StrToInt(char * str)
    {
       int value = 0;
       int sign = 1;
       if(*str == '-')//负号 
       {
          sign = -1;
          str++;
       }
       
       while(*str)// 此法很巧妙,直接从高位开始乘加即可,不用考虑字符串的长度
       {
          value = value * 10 + *str - '0';
          str++;
       }
       return sign*value;
    }
    int main()
    {
    	cout<<StrToInt("123")<<endl;
    	return 0;
    }

    当然也可以利用strlen或找结束字符的方式寻找最低位,乘数变化即可
     
    二,加强版
           下面的程序考虑了八进制、十进制、十六进制的字符串。
    int StrToInt(char * str)
    {
       int value = 0;
       int sign = 1;
       int radix;
     
       if(*str == '-')
       {
          sign = -1;
          str++;
       }
       if(*str == '0' && (*(str+1) == 'x' || *(str+1) == 'X'))
       {
          radix = 16;
          str += 2;
       }
       else if(*str == '0')      // 八进制首字符为0
       {
          radix = 8;
          str++;
       }
       else
          radix = 10;
       while(*str)
       {
          if(radix == 16)
          {
            if(*str >= '0' && *str <= '9')
               value = value * radix + *str - '0';
            else
               value = value * radix + (*str | 0x20) - 'a' + 10;
           // value = value * radix + *str - 'a' + 10; // 也没问题啊
          }
          else
            value = value * radix + *str - '0';
          str++;
       }
       return sign*value;
    }
    整数转换为字符串
    void itoa (int n,char s[])
    {
    int i,j,sign;
    if((sign=n)<0)//记录符号
            n=-n;//使n成为正数         i=0;
    do{
            s[i++]=n+’0’;//取下一个数字
    }while ((n/=10)>0);//删除该数字
    if(sign<0)
            s[i++]=’-’;
    s[i]=’\0’;
    for(j=i;j>=0;j--)//生成的数字是逆序的,所以要逆序输出
            printf("%c",s[j]);
    }
  • 相关阅读:
    《从零开始学Swift》学习笔记(Day 45)——重写方法
    《从零开始学Swift》学习笔记(Day 44)——重写属性
    浅析Android中ndk-build支持的参数
    texstudio on ubuntu 12.04
    arm上的参数列表传递的分析(以android为例)
    编译错误
    native method与so中function的关联
    Java.lang.NoClassDefFoundError--找不到相应的类
    Sublime Text 3 文档
    JNI 函数注册与管理
  • 原文地址:https://www.cnblogs.com/secbook/p/2654971.html
Copyright © 2020-2023  润新知