面试100题系列之15将字符串转换成数

1、输入一个字符串,将其转换成整数。注意,这里没说是正整数,所以需要考虑负数的情况。没什么技巧,直接算就可以了。只要考虑到负数就OK了,当然处理技巧也很重要。核心代码如下:
//字符串转换成整数
int StrToInt(char *str)
{
	if(!str)
		return -Inf;
	int nLen = strlen(str);
	int i = 0;
	int ans = 0;
	bool IsNag = false;
	if(str[0] == '-')
	{
		IsNag = true;
		i = 1;
	}
	for(; i < nLen; ++i)
	{
		ans = ans * 10 + str[i] - '0';
	}
	if(IsNag)
		return -ans;
	else
		return ans;
}
2、如果输入一个字符串,转换成数,可能有小数点。那就需要考虑小数点的位置的。这样依靠小数点把字符串分成两部分,整数部分和小数部分。分别计算就可以了。怎么把代码写得简洁好看,那就是技巧问题了。慢慢积累吧!代码如下:
//字符串转换成浮点数
double StrToDouble(char *str)
{
	if(!str)
		return -Inf;//对于double类型,可能这个Inf是不够的
	int nLen = strlen(str);
	int i = 0;
	double ans = 0.0;
	bool IsNag = false;
	if(str[0] == '-')
	{
		IsNag = true;
		i = 1;
	}
	//整数部分
	for( ; i < nLen; ++i)
	{
		if(str[i] == '.')
			break;
		ans = ans * 10 + str[i] - '0';
	}
	//小数部分
	double flag  = 10.0;
	for(i = i + 1; i < nLen; ++i)
	{
		ans += (str[i] - '0') / flag;
		flag *= 10.0;
	}
	if(IsNag)
		return -ans;
	else
		return ans;
}
3、OK,最后给出main函数。
#include<stdio.h>
#include<string.h>
const int Inf = 1e9;
int main()
{
	const int N = 20;
	char str[N];
	while(scanf("%s", &str) != EOF)
	{
		//printf("%d\n", StrToInt(str));
		printf("%lf\n", StrToDouble(str));		
	}
	return 0;
}


你可能感兴趣的:(面试100题系列之15将字符串转换成数)