输入合法字符串,转换成数值

#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下运行通过

猜你喜欢

转载自blog.csdn.net/qq_41822235/article/details/80616665