#include<stdio.h> #include<string.h> #include<ctype.h> int my_Str_To_Dec(const char *str) {//十进制 int data = 0; for (int i = 0; str[i] != '\0'&&isdigit(str[i]); ++i) { data = data * 10 + str[i] - '0'; } return data; } int my_Str_To_Oct(const char *str) {//八进制 int data = 0; int i = 0; while (str[i] != '\0'&& isdigit(str[i]) && str[i] < '8') { data = data * 8 + str[i] - '0'; ++i; } return data; } int my_Str_To_Hex(const char *str) { //处理十六进制 int data = 0; int i = 0; while (str != '\0' && isxdigit(str[i])) { //判断是否为十六进制范畴 if (isdigit(str[i])) { //判断是否为0~9。 data = data * 16 + str[i] - '0'; } else //判断是否是'a'到'f' { char ch = tolower(str[i]); //字符转换为小写字母 data = data * 16 + ch - 'a' + 10; } } return data; } int my_atoi(const char *str) { int data = 0; int tag = 1; //符号位的判断,-1,1分别代表正负 if (NULL == str)return data; while (isspace(*str))++str; //将空格全部跳过。 if (*str == '-') { tag = -1; ++str; } if (*str != '0') { data = my_Str_To_Dec(str); //处理十进制 } else if (*(str + 1) == 'x' || *(str + 1) == 'X') //处理十六进制 { data = my_Str_To_Hex(str + 2); } else { data = my_Str_To_Oct(str + 1); //处理八进制 } return data * tag; } int main() { char str[100] = { "12345678" }; int x = 0; x = my_atoi(str); printf("%d", x); return 0; }
本程序在VS2017下运行通过