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

2014-11-24 02:37:42 · 作者: · 浏览: 13

1、输入一个字符串,将其转换成整数。注意,这里没说是正整数,所以需要考虑负数的情况。没什么技巧,直接算就可以了。只要考虑到负数就OK了,当然处理技巧也很重要。核心代码如下:
[cpp]
//字符串转换成整数
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;
}

//字符串转换成整数
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、如果输入一个字符串,转换成数,可能有小数点。那就需要考虑小数点的位置的。这样依靠小数点把字符串分成两部分,整数部分和小数部分。分别计算就可以了。怎么把代码写得简洁好看,那就是技巧问题了。慢慢积累吧!代码如下:
[cpp]
//字符串转换成浮点数
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;
}

//字符串转换成浮点数
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函数。
[cpp]
#include
#include
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;
}

#include
#include
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;
}