#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<limits.h>
int my_hex(const char* str) {
int sum = 0;
while (isxdigit(*str)) {
int x = 0;
if (isdigit(*str)) {
x = *str - '0';
}
else {
char ch = tolower(*str);
x = ch - 'a' + 10;
}
sum = sum * 16 + x;
++str;
}
return sum;
}
int my_oct(const char* str) {
int sum = 0;
while (isdigit(*str)&&*str!='8'&&*str!='9') {
sum = sum * 8 + *str - '0';
++str;
}
return sum;
}
int my_dec(const char* str) {//十进制
int sum = 0;
while (isdigit(*str)) {
sum = sum * 10 + *str - '0';
++str;
}
return sum;
}
int my_atoi(const char* str) {
int sum = 0;
int num = 0;
if (str == nullptr)return num;
int tag = 0;//1 负数 0正数
while (isspace(*str))++str;
if (*str == '-') {
tag = 1;
++str;
}
if (*str == '+') {
tag = 0;
++str;
}
if (*str == '0') {
if (*(str + 1) == 'x' || *(str + 1) == 'X') {
sum = my_hex(str + 2);
}
else {
sum = my_oct(str + 1);
}
}
else {
sum = my_dec(str);
}
if (tag == 1) {
sum = -sum;
}
return sum;
}
int main() {
const char* str[] = {
"12321", //12321
"0123", //123
" -234", //-234
"0x2a4f",
" +2234 234",//2234
"23432.234"//23432
};
for (int i = 0; i < 6; ++i) {
printf("%d\n", my_atoi(str[i]));
}
return 0;
}
实现C语言标准库中的atoi函数
最新推荐文章于 2024-04-28 21:03:18 发布