question:Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
问题的大意:将字符串换成integar,需要注意的是输入的格式,我会在代码中进行讲解
方法一:
与方法二的思想是一样的,代码的解释可参照方法二
int myAtoi(char* str) { int len = strlen(str); int max = INT_MAX; int min = INT_MIN; long num = 0; int i = 0; int flag = 1; while(str[i] == ' ' || str[i] == ' ') i++; if(str[i] == '+' || str[i] == '-') { if(str[i] == '-') flag = 0; } else { if(str[i] >= '0' && str[i] <= '9') num = str[i] - '0'; else return 0; } for(i = i+1; i < len; i++) { if(str[i] >= '0' && str[i] <= '9') { num = 10 * num + str[i] - '0'; if(flag && (num > max)) return max; if(!flag && (-num < min)) return min; } else break; } if(!flag) num = -num; return (int)num; }
方法二:
int myAtoi(char* str) { char *p = str; int max = INT_MAX; int min = INT_MIN; long num = 0; // 注意类型要大于int类型 int flag = 1; // 作为正负的标志 while(*p == ' ' || *p == ' ') // 过滤掉字符串开始的无用字符 p++; if(*p == '+' || *p == '-') { if(*p == '-') // 如果为负数,标记为0 flag = 0; } else { if(*p >= '0' && *p <= '9') num = *p - '0'; else // 格式不符合,返回0 return 0; } for(++p; *p; p++) { if(*p >= '0' && *p <= '9') { num = 10 * num + *p - '0'; if(flag && (num > max)) // 为正数,且当前num大于int类型上界,返回INT_MAX return max; if(!flag && (-num < min)) // 为负数,且当前num小于int类型下界,返回INT_MIN return min; } else break; } if(!flag) // 为负数,反转 num = -num; return (int)num; }
采用指针的方式来遍历字符串,相比方法一更简洁