问题:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串“345”,则输出整数345。
分析:可以一次扫描每一个字符,把之前得到的数字乘以10再加上当前字符表示的数字。
需要考虑:1)输入的是否是空字符串;
2)是否有正负号;
3)字符串中是否有非数字的字符,如果有,则停止转换;
4)考虑移除问题;
代码如下:
int str2num(const char* str)
{
//首先判空
assert(str != NULL);
long long num = 0;
bool minus = false;
const char* temp = str;
//判断正负
if(*temp == '+')
temp++;
else if(*temp == '-')
{
temp++;
minus = true;
}
while(*temp != '\0')
{
if(*temp >= '0' && *temp <= '9')//合法字符
{
num = num * 10 + (*temp - '0');
//判断是否溢出
if(num > numeric_limits<int>::max())
{
num = 0;
break;
}
*temp++;
}
//非法字符
else
{
num = 0;
break;
}
}
if(*temp == '\0')
if(minus)
num = 0 - num;
return num;
}