题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:输入一个字符串,包括数字字母符号,可以为空。
输出描述:如果是合法的数值表达则返回该数字,否则返回0
头:int StrToInt(string str) ;
例如:
输入:+2147483647 1a33
输出: 2147483647 0
一个整数,要么正,要么负,所以需要先判断字符串的第一个字符是否为'+'或'-',如果是,那么需要做一些事情:
//若为负数先让flag为-1,最后的结果乘以flag:-1 ;若为正数,就不用做什么,最后的结果乘以flag:1
int flag = 1;
if (str[0] == '-')
flag = -1;
//那么第0位是+或-,则直接从第1位开始判断
int i = 0;
if (str[0] == '+' || str[0] == '-')
i++;
好了,接下来进入循环,只有当字符为'0'到'9'时,它才算是有效的,其他一律无效。
那么如何转换为整数呢?其实方法很简单:
for (; i < length; ++i)
{
if (!(str[i] >= '0' && str[i] <= '9'))
return 0;
ret = ret * 10 + str[i] - '0';
}
接下来是完整代码:
int StrToInt(string str)
{
int length = str.size();
long long ret = 0;
if (length <= 0)
return 0;
//若为负数先让flag为-1,最后的结果乘以flag:-1 \
若为正数,就不用做什么,最后的结果乘以flag:1
int flag = 1;
if (str[0] == '-')
flag = -1;
//那么第0位是+或-,则直接从第1位开始判断
int i = 0;
if (str[0] == '+' || str[0] == '-')
i++;
for (; i < length; ++i)
{
if (!(str[i] >= '0' && str[i] <= '9'))
return 0;
ret = ret * 10 + str[i] - '0';
}
return ret * flag;
}