1 //////////////////////////////////////////////////////////////////////////
  2 //   atoi  atof   atol 大小写转换
  3 //
  4 #include "stdafx.h"
  5 #include <stdio.h>
  6 #include <stdlib.h>
  7 #include <ctype.h>
  8 #include <assert.h>
  9 
 10 //////////////////////////////////////////////////////////////////////////
 11 // atoi
 12 long long StrToInt(const char* buf, bool flag)
 13 {
 14     long long num = 0;
 15     while(*buf != '\0')
 16     {
 17         if(*buf >= '0' && *buf <= '9')
 18         {
 19             int f = flag ? 1 : -1;   // 判断+ - 号
 20             num = num*10 + f*(*buf - '0');
 21             if((flag && num > 0x7FFFFFFF) ||     // 防止溢出 
 22                              (!flag && num < (signed int)0x80000000))
 23             {
 24                 num = 0;
 25                 break;
 26             }
 27             buf++;
 28         }
 29         else
 30             break;
 31     }
 32     return num;
 33 }
 34 int m_atoi(const char* buf)
 35 {
 36     assert(buf); // 是否为空
 37     long long value = 0;
 38     while(*buf == ' ') // 前有空格
 39         buf++;
 40     bool flag = true;
 41     if(*buf != '\0')
 42     {
 43         if(*buf == '+') // + - 号不是非法字符
 44             buf++;
 45         else if(*buf == '-')
 46         {
 47             buf++;
 48             flag = false;
 49         }
 50         if(*buf != '\0')
 51         {
 52             value = StrToInt(buf, flag);
 53         }
 54     }
 55     return (int)value;
 56 }
 57 
 58 //////////////////////////////////////////////////////////////////////////
 59 // atof
 60 double m_atof(const char* buf)
 61 {
 62     assert(buf);
 63     double value = 0;
 64     double nVal = 1;
 65     bool flag = true;
 66     int i = 0, j = 0, k = 0;
 67     while(buf[i] == ' ')
 68         i++;
 69     while(buf[i])
 70     {
 71         if(isdigit(buf[i]))
 72         {
 73             value = value * 10 + (buf[i] - '0');
 74             i++;
 75         }else if(buf[i] == '.')
 76         {
 77             j = ++i;
 78         }else if(buf[i] == 'e' || buf[i] == 'E')
 79         {    
 80             i++;
 81             if(buf[i] == '-')
 82             {
 83                 i++;
 84                 flag = false;
 85             }
 86             int k = 0;
 87             while(isdigit(buf[i]))
 88             {
 89                 k = k * 10 + (buf[i] - '0');
 90                 i++;
 91             }
 92             for(int i = 0;i < k;i++)
 93             {
 94                 nVal *= 10;
 95             }
 96             break;
 97             
 98         }else
 99             break;
100     }
101     if(j != 0)
102         for(;j<i;j++)
103              value = value / 10;
104     if(flag)
105         value *= nVal;
106     else
107         value /= nVal;
108     return value;
109 }
110 // atol
111 //////////////////////////////////////////////////////////////////////////
112 // 大小写转换 (大写 -> 小写)
113 char* Change(char* str)
114 {
115     assert(str);
116     int i = 0;
117     while(str[i])
118     {
119         if(str[i] >= 'A' && str[i] <= 'Z')
120             str[i] = str[i] + ('a' - 'A');
121         i++;
122     }
123     return str;
124 }
125 //////////////////////////////////////////////////////////////////////////
126 int main(int argc, char* argv[])
127 {
128     char *buf = "-123";
129     int value = m_atoi(buf);
130     printf("%d\n", value);
131     
132     double value2 = m_atof("  123e-2");
133     printf("%f\n", value2);
134     char str[] = "abcABC_123Asdf .";
135     printf("%s\n", str);
136     printf("%s\n", Change(str));
137     return 0;
138 }

 

posted on 2017-03-09 20:40  北纬395427  阅读(245)  评论(0编辑  收藏  举报