题目来源:牛客网
题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0
数据范围:字符串长度满足 0≤n≤100
进阶:空间复杂度 O(1) O(1) ,时间复杂度O(n) O(n)
注意:
①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0
②字符串中可能出现 +/- 且仅可能出现在字符串首位。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0
示例
代码:
#include <string>
class Solution {
public:
int StrToInt(string str) {
string s = str;
auto begin = s.begin();
auto end = s.end();
int flag=1;//符号
if(*begin=='+'){
flag=1;
begin++;
s.erase(0, 1);
}else if(*begin=='-'){
flag=-1;
begin++;
s.erase(0, 1);
}
if(s.empty()){
return 0;
}
while(*begin!='\0'){
if(*begin < '0'|| *begin > '9'){
return 0;
}
begin++;
}
int m = stoi(s);
m *=flag;
return m;
}
};
思路:
使用迭代器来遍历字符串,我们先看第一个字符是否为+或者-,并设置flag,同时删除符号,接着判空,防止整个字符串只有符号,接着开始遍历,不符合0-9的直接返回0,否则++begin,这里循环条件为*begin!= ’\0‘,如果写成!=end或者<end,<=end都会遇到边界问题,最后使用stoi将整个字符串转为数字,并乘上flag即可