题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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; }