OJ 系列之字符串转换为整数

/*
字符串转换为整数
题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。分析:此题看起来,比较简单,每扫描到一个字符,我们把在之前得到的数字乘以10再加上当前字符表示的数字。这个思路用循环不难实现。然其背后却隐藏着不少陷阱,正如zhedahht 所说,有以下几点需要你注意:
    1、由于整数可能不仅仅之含有数字,还有可能以'+'或者'-'开头,表示整数的正负。如果第一个字符是'+'号,则不需要做任何操作;如果第一个字符是'-'号,则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。
    2、如果使用的是指针的话,在使用指针之前,我们要做的第一件是判断这个指针是不是为空。如果试着去访问空指针,将不可避免地导致程序崩溃(此第2点在下面的程序不需注意,因为没有用到指针)。
    3、输入的字符串中可能含有不是数字的字符。
每当碰到这些非法的字符,我们就没有必要再继续转换。
    4、溢出问题。由于输入的数字是以字符串的形式输入,因此有可能输入一个很大的数字转换之后会超过能够表示的最大的整数而溢出。
    总结以上四点,代码可以如下编写
*/
#include<stdio.h>
#include <string.h>

void str_2_int(char *p)
{
	int len =  strlen(p);

	if(len<=0)
	{
		return;
	}
	int sym = 1;//'+'为1
	int pos =0;

	if(p[0]=='+')
	{
		pos ++;
		sym = 1;
	}
	else if(p[0]=='-')
	{
		pos ++;
		sym = -1;
	}
	int sum = 0;
	int i = 0;

	for(i=pos;i<len;i++)
	{
		if(p[i]>'9'&&p[i]<'0')/*其他字符*/
		{
			return ;
		}
		sum = sum*10+p[i]-'0';

		if(sum<0) /*溢出*/
		{
			return;
		}
	}

	if(p[0]=='-')
	{
		sum = sum*sym;
	}

	printf("%d",sum);
}

int main()
{
	char *str = "-1024";  
    str_2_int(str);  
    getchar();
    return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂奔的乌龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值