字符串转化成整数

题目描述:输入一个表示整数的字符串,并把该字符串转化成整数并输出。例如输入“123”,则输出整数123.

基本思路:以"123"作为例子。当我们扫描到字符串的第一个字符'1'时,我们不知道后面还有多少位,仅仅知道这是第一位,因此此时得到的数字是1。当扫描到第二个数字'2'时,此时我们已经知道前面已经一个1了,再在后面加上一个数字2,那前面的1相当于10,因此得到的数字是1*10+2=12。接着我们又扫描到字符'3',我们已经知道了'3'的前面已经有了12,由于后面要加上一个3,前面的12就相当于120了,因此得到的数字就是12*10+3=123。

特殊处理:1.以+或者-开头表示正负数;2.含有非法字符;3.溢出(上下溢出)。

代码如下:

// StrToInt.cpp : main project file.
//实现将字符串转化为整数的功能

#include "stdafx.h"
#include <iostream>
using namespace std;
//特殊情况:1.字符串为空指针或空串  
//2.字符串中有非0到9的字符(负号,#,@,等等)  
//特别需要注意的是:还要考虑溢出的问题。正整数最大值0x7FFFFFFF,负整数最小值0x80000000  
//函数功能:将字符串str转换为整数, 由参数nInt接收整数值,若转换成功返回true,否则返回false  

bool StrToInt(const char *str, int &nInt)
{
	if (str == "")  
	{
		cout<<"空串!"<<endl;
		return false;
	}
	else if(str==NULL)
	{
		cout<<"空指针!"<<endl;
		return false;
	}
	else if ((strcmp(str, "+")==0) || (strcmp(str, "-")==0))
	{
		cout<<"字符串输入无效!"<<endl;
		return false;
	}
	else
	{
		char *p=(char *)str;
		bool isFirst=true;//标记是否为字符串的第一个字符
		bool hasMinus=false;//标记字符串的第一个字符是否为负号
		nInt=0;
		while(*p!='\0')
		{
			if(isFirst&&(*p=='-'))
			{
				hasMinus=true;
				p++;
				continue;
			}
			else if (isFirst&&(*p)=='-')
			{
				p++;
				continue;
			}
			if((*p)>='0' && (*p)<='
				9')
			{
				nInt=nInt*10+(*p)-'0';
			if ((!hasMinus && nInt>0x7FFFFFFF) || (hasMinus && nInt<(signed int)0x80000000))//注意此处(signed int)  
				{
					cout<<"字符串数值溢出,输入无效!"<<endl;
					return false;
				}
					p++;
			}
			else//当前字符为非数字字符
			{
				cout<<"字符串中包含非数字的字符,不能转换为数字!"<<endl;
				return false;
			}
		}
			if(hasMinus)
			{
				nInt=(-1)*nInt;
			}
			return true;
		}
	}
	


int main(array<System::String ^> ^args)
{
    int nTest1=100000000000000;
	int nTest2=-1000000000000000;
	if(nTest1>0x7FFFFFFF)
	{
		cout<<"上溢!"<<endl;
	}
	if (nTest2<0x80000000)
	{
		cout<<"下溢!"<<endl;
	}
	int nInt=0;
	char *str=NULL;
	if(StrToInt("123",nInt))
		cout<<nInt<<endl;
	if(StrToInt("+123",nInt))
		cout<<nInt<<endl;
	if(StrToInt("-123",nInt))
		cout<<nInt<<endl;
	if(StrToInt("@123",nInt))
		cout<<nInt<<endl;
	if(StrToInt("1@23",nInt))
		cout<<nInt<<endl;
	if(StrToInt("+",nInt))
		cout<<nInt<<endl;
	if(StrToInt("-",nInt))
		cout<<nInt<<endl;
	if(StrToInt("1000000000000000000000000000000000",nInt))
		cout<<nInt<<endl;
	if(StrToInt("-1000000000000000000000000000000000",nInt))
		cout<<nInt<<endl;
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值