1、题目要求
写一个函数,将字符串转换为整型数,转换规则参考库函数atoi,但不允许使用atoi。
2、效果如下:
输入:abc123 输出:0
输入:123abc 输出:123
输入:-123abc 输出:-123
输入:abc-123 输出:0
输入:+123abc 输出:123
输入:abc+123 输出:0
3、实现
首先判断首元素,如果首元素不是0-9或‘+’或‘-’,则返回0。
if(!(str[0] >= '0' && str[0] <= '9' || str[0] == '-' || str[0] == '+')) {
return 0;
}
否则如果首元素是0-9的话则依次判断数组后面元素是否为0-9,不是则直接跳出循环并返回目标值(target)
代码如下:
else if(str[0] >= '0' && str[0] <= '9') {
target = target*10 + str[0] - 48;
for (i = 1; str[i] != ' '; i++) {
if ((str[i] >= '0' && str[i] <= '9')) {
target = target*10 + str[i] - 48;
}
else {
break;
}
}
}
否则如果首元素是‘-’的话则依次判断数组后面元素是否为0-9,不是则直接跳出循环并返回目标值(target)
代码如下:
else if(str[0] == '-') {
for (i = 1; str[i] != ' '; i++) {
if ((str[i] >= '0' && str[i] <= '9')) {
target = target*10 - str[i] + 48;
}
else {
break;
}
}
}
否则如果首元素是‘+’的话则依次判断数组后面元素是否为0-9,不是则直接跳出循环并返回目标值(target)
代码如下:
else {
for (i = 1; str[i] != ' '; i++) {
if ((str[i] >= '0' && str[i] <= '9')) {
target = target*10 + str[i] - 48;
}
else {
break;
}
}
}
全部代码如下:
#includeint my_atoi(char *str); int main() { char str[32] = {0}; printf("Please input a string:n"); while(1) { scanf("%s",str); printf("%dnn", my_atoi(str)); } return 0; } int my_atoi(char *str) { int target = 0,i; if(!(str[0] >= '0' && str[0] <= '9' || str[0] == '-' || str[0] == '+')) { return 0; } else if(str[0] >= '0' && str[0] <= '9') { target = target*10 + str[0] - 48; for (i = 1; str[i] != ' '; i++) { if ((str[i] >= '0' && str[i] <= '9')) { target = target*10 + str[i] - 48; } else { break; } } } else if(str[0] == '-') { for (i = 1; str[i] != ' '; i++) { if ((str[i] >= '0' && str[i] <= '9')) { target = target*10 - str[i] + 48; } else { break; } } } else { for (i = 1; str[i] != ' '; i++) { if ((str[i] >= '0' && str[i] <= '9')) { target = target*10 + str[i] - 48; } else { break; } } } return target; }



