看《剑指offer》之后开始学习编程的好习惯和纠正坏习惯,以下是简单实例记录。
当然以下代码还有有一点点问题,就是还没学会GTest所有测试函数,所以测试的实例中如果为0或者非法输入结果都是0(待改进)。
![](https://img-blog.csdnimg.cn/20210319105651627.png)
![](https://img-blog.csdnimg.cn/2021031911003163.png)
![](https://img-blog.csdnimg.cn/20210319110132790.png)
![](https://img-blog.csdnimg.cn/20210319110117584.png)
#include "pch.h"
#include <iostream>
#include <string>
using namespace std;
int strToInt(string s)
{
if (s.empty()) return false;
int number = 0, i = 0, flag = 1;
while (i < s.size())//检验输入合法性
{
if (s[i] == '0') i++;
else if ((s[i] <= '9' && s[i] >= '1') || s[i] == '-' || s[i] == '+') break;
else return false;
}
if (s[i] == '-' || s[i] == '+')//符号及位置判断是否为合法输入
{
if (s[i] == '-') flag = -1;
i++;
if (i == s.size()) return false;
}
while (i < s.size())//转换整数并识别是否含有非法输入
{
if (s[i] > '9' || s[i] < '0') return false;
number = number * 10 + s[i] - '0';
i++;
}
return flag * number;
}
TEST(Test, Test1) {
EXPECT_EQ(-100, strToInt("-100"));
EXPECT_EQ(0, strToInt("-1-00"));
EXPECT_EQ(100, strToInt("+100"));
EXPECT_EQ(100, strToInt("100"));
EXPECT_EQ(-100, strToInt("0000000000-100"));
EXPECT_FALSE(strToInt("-1-00"));
}
![](https://img-blog.csdnimg.cn/20210319110309930.png)