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 }