题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:输入一个字符串,包括数字字母符号,可以为空
输出描述:如果是合法的数值表达则返回该数字,否则返回0
示例
输入
+2147483647
1a33
输出
2147483647
0
解题思路
先判断str[0]是否为符号或者数字字符,如果不是则直接返回0;
如果str[0]是符号,则定义f=1,若str[0]是负号,则定义f= -1;
如果str[0]是数字字符,则直接转换成整数。
再接着判断后面的字符,若非数字字符则直接返回0,是数字字符就继续转换。
完整代码
//#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
int StrToInt(string str) {
int s = 0;
int s1 = 0;
if (str[0] == '+' || str[0] == '-' || (str[0] >= '0'&&str[0] <= '9'))
{
int f = 1;
if (str[0] >= '0'&&str[0] <= '9')
s = (str[0] - '0')*pow(10, str.size() - 1);
if (str[0] == '-')
f = -1;
for (int i = str.size() - 1; i>0; --i)
{
if (str[i] >= '0'&&str[i] <= '9')
s += (str[i] - '0')*pow(10, s1++);
else
return 0;
}
return s*f;
}
return 0;
}
};
//测试过程
int main()
{
Solution s;
string str;
cin >> str;
int ret=s.StrToInt(str);
cout << ret << endl;
system("pause");
return 0;
}