对正负号的考虑,是考虑到有‘+’、‘-’号的情况存在,使得在这样的情况出现时,有所判断
如果没有+ -这两种字符是不用理会的,他意思就是只有+123这种字符才是合法的。才是真的正数
意思就是正数才有转换的意义,负数就溢出,不合法,不转换
利用flag来辅助判断字符串的有效性。
#include<iostream>
#include<windows.h>
using namespace std;
//1.把一个字符串转换为整数
int string2int(char* string) {
if (*string == '\0' || string == NULL)
return -1;
int flag = 1;// 辅助判断正负号合理与否
int num = 0;
char *_str = string;
//考虑到正负号
if (*_str == '+') //解引用 高于 ==的优先级: 如果第一个字符是+号,
{
flag == 1; //上面是flag==1 这个是判断语句哦,是等于1哦,不是赋值语句
++_str;
}
else if (*_str == '-')
{
++_str;
flag = -1; //字符串为-时,flash=-1,就是不合法
}
while (*_str) {
if (*_str > '0' && *_str < '9') //输入的字符要在十进制的范围内
{
num = num * 10 + flag * (*_str - '0'); //字符转换成整形数字的表达式 flag *相当于强制转换成整形-int类型
//判断数据是否溢出
/*
int类型的最大正数:0x7fffffff;
int类型的最小负数:0x80000000;
就是num最大能存放多少位数字,超过,就溢出
&& num < (int)0x80000000)可以加上最小值判断,为负数且小于最小值的时候溢出
*/
if ((flag == 1 && num > 0x7fffffff)
|| (flag == -1 /*&& num < (int)0x80000000)*/)
return -2; //溢出
}
else
{
//输入的字符串中不全是数字
return -1; //不合法
}
++_str;
}
return num;
}
void test1() {
char aa[] = "3147483"; //要用数组去接收字符串,不然会报错
char* str = aa; //再把数组的首地址赋给指针str
int n = string2int(str); //接收返回运行出来的数字结果
cout << n << endl;
}
int main() {
test1();
system("pause");
return 0;
}