

#include<stdio.h> #include<stdlib.h> int main() { char a[]="123412"; int ret=atoi(a); printf("%d",ret); return 0; }
例如一个字符串ch="a1234",那么atoi第一次检索时没有直接遇到数字,而是遇到了字母,那么就会返回0,如图。

atoi会跳过前面的空格,直至检索到数字。如果该字符串全部都是空格,那么就会返回0。


如果字符串数字和数字之间存在空格,那么不会继续检索。

atoi会自动识别正负号,并在输出的数字前面加上正负号。


但如果是在数字之后的正负号,那么就会与数字后遇到字母,空格同理,停止继续检索。

在编写时,我们需要注意以下几点:1,开头遇到空格应往后继续跳过,直到遇到数字;2,如果碰到字母应直接返回0;3,应检查atoi转换后的数字是否还在int表示范围内。
代码如下
#include<stdio.h> #include<string.h> #include<ctype.h> #include<limits.h>
int myatoi(char* p) { if (*p == '\0')//判断是否为空指针 { return 0; } while (isspace(*p)) { p++; }//判断空格
int flag = 1; long m = 0; if (*p == '+') { flag = 1; p++; } else if (*p == '-') { flag = -1; p++; }//判断正负号
while (*p != '\0') {
if (*p >= '0' &&*p <= '9') { m = m * 10 + flag * (*p - '0'); }//对数据进行转换 else { break; //你不是数字是不是就要break,离开循环 } if (m< INT_MIN || m > INT_MAX)//判断是否超出int表示范围 break; p++; } return m; } int main() { char a[1000]; fgets(a, 1000, stdin);//输入字符串 int len = strlen(a); a[len - 1] = '\0';//计算字符串长度并在末尾加上斜杠0,因为我在这里是以字符数组的方式定义的
int m = myatoi(a); printf("%d", m); return 0; }