/*该问题的知识点
1. 对于c风格的字符串来说,结尾标志位‘\0’
2. 将纯数字字符串转换为整数,需要依次的拿前一个字符生成的数字乘以10 ,再加上当前字符和‘0’的差
3. 对于特殊情况的处理
空字符数组;
字符串中间有空格,字符串前面会有很多空格
字符串中间存在不合法字符
字符串第一个非空字符为‘-’或者‘+’
对于最大正整数,最小负整数的判断
*/
#include <iostream>
#include <limits.h>
using namespace std;
int str2int(const char *s);
int StrToInt(const char *s){
if(s == NULL) return -1;
const int int_max = INT_MAX;
const int int_min =INT_MIN;
int flag = 0;
long result = 0;
while (*s != '\0') {
if (*s == ' ') {
++s;
continue;
}
//检测到第一个不是空格的字符
if (flag == 0 ) {
if (*s == '-') {
flag = -1;
++s;
continue;
}else if (*s == '+' ){
flag = +1;
++s;
continue;
}
else if(*s>='0' && *s<= '9'){
flag = 1;
result = flag * (*s-'0');
cout<<result<<endl;
++s;
continue;
}else{
cerr<<"符号位出现不合法字符"<<endl;
return -1;
}
}
if(*s < '0' || *s > '9'){
cerr<<"数字位出现不合法字符"<<endl;
return -1;
}
if (flag == 1) {
result = result*10 + (*s - '0');
}else if(flag == -1)
result = result*10 - (*s - '0');
if (result > int_max || result < int_min) {
cerr<<"超出最大正整数和最小付整数"<<endl;
return -1;
}
++s;
}
return (int)result;
}
int main(int argc, const char * argv[]) {
const char *instring = " +1 2 344599";
cout<<"结果是:"<<StrToInt(instring)<<endl;
cout<< str2int(instring)<<endl;
return 0;
}