c语言,字符串转换成整数

c语言的数字字符串转换为整数,1.可接受“123 2123”处理为1232123;2.空指针、正负号、非纯数字字符串、数据越界溢出的错误处理。

 

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

//子函数的声明
int StrToInt(char * string);

void main()
{
	//变量的声明
	char str[20];//边界值-2147483648和2147483647,最多需要12个字符
	int result;
	
	//输入部分
	printf("请输入:");

	//接受输入数据
	gets(str);//scanf接受到空格时中断,但gets不,例如“244 754”

	//实现
	result = StrToInt(str);

	//输出
	if(result != 0)
	{
		printf("结果:%d\n",result);
	}
}

//把一个字符串转换成整数
int StrToInt(char* string)
{
	int sign = 1;//1代表+正数,-1代表负数
	__int64 number = 0;//声明为long long类型,防止数据溢出
	//1.空指针的判断
	if(NULL == string)
	{
		printf("空指针异常!\n");
		return 0;
	}
	//2.正负号int
	if(*string =='+')
	{
		//设置sign标记
		sign = 1;
		*string++;
		
	}
	if( *string =='-')
	{
		//设置sign标记
		sign = -1;
		*string++;
	}
	//3.由于返回值为0做了异常处理,真正的"0"需要特殊处理
	if(string == "0")
	{
		printf("结果:0\n");
	}
	while(*string != '\0')
	{
		int normalflag0 =1;
		//4.空格判断
		if(*string == ' ' || *string == '\t')
		{
			*string++;
		}
		//5.非数字字符时,错误处理
		if(*string < '0' || *string > '9')
		{
			printf("包含非数字字符!\n");
			number = 0;
			break;
		}
		//6.边界值,最大正整数和最小负整数
		number = number * 10 + sign*(*string - '0');
		if((sign==1 && number>INT_MAX)|| (sign==-1 && number<INT_MIN))
		{
			//INT_MAX和INT_MIN的头文件是<limits.h>表示int所能表示的最大和最小的数
			printf("有符号整型超过溢出!最小到-7fffffff-1即-2147483648,最大到7fffffff即2147483647\n");
			number = 0;
			break;
		}
		string++;
	}	
	return (int)number;
}

 

 

 

 

 

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值