字符串转整数问题

本文详细介绍了如何在C++中处理非法参数,特别是针对字符串转整数函数,确保输入的合法性并正确转换为整数类型。通过实例代码展示了跳过空格、判断正负号、验证非法字符以及处理数值溢出等问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要点:要考虑到各种非法参数。

实现:

/**********************************
字符串转整数
by Rowandjj
2014/7/15
***********************************/
#include<iostream>
#include<stdlib.h>//不加这个头文件在九度oj上会编译错误
using namespace std;
int state = 0;//0代表串非法,1代表正常
long Str2Int(const char *str)
{
	long num = 0;
	if(str == NULL)//输入null
	{
		state = 0;
		return 0;
	}
	const char* digit = str;
	int minius = 0;//0代表正数,1代表负数
	while(*digit == ' ')//跳过空格
	{
		digit++;
	}
	if(*digit == '+')
	{
		digit++;
	
	}
	else if(*digit == '-')
	{
		minius = 1;
		digit++;
	}
	if(*digit == '\0')//只输入+或者-
	{
		state = 0;
		return 0;
	}
	
	while(*digit != '\0')
	{
		if(*digit > '9' || *digit < '0')//非法字符
		{
			state = 0;
			return 0;
		}
		state = 1;
		num = num*10 + (*digit - '0');//核心代码
		digit++;
	}
	//越界
	if(*digit>0x7fffffff || *digit<(signed int)0x80000000)
	{
		state = 0;
		return 0;
	}
  return minius?(0-num) : num;
}
int main()
{
	long digit;
	char str[1000];
	char *p = str;
	while(cin>>p)
	{
		digit = Str2Int(p);
		if(state==0)
		{
			cout<<"My God\n";
		}else//state == 1
		{
			cout<<digit<<endl;
		}
 	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值