#include <stdio.h>
#include <ctype.h>
int atoi1(char s[]);
int atoi2(char s[]);
/*atoi函数:将字符串s转换为相应的整型数*/
int main(){
printf("%d\n",atoi1("123"));
printf("%d\n",atoi2(" -123"));
return 0;
}
/*版本一:*/
int atoi1(char s[]) {
int i,n;
n = 0;
for (i = 0; s[i] >= '0' && s[i] <= '9'; i++) {
n = n * 10 + (s[i] - '0');//该公式可以直接将字符串转换为整型值--推导见练习2-3
}
return n;
}
/*版本2:可以处理可选的前导空白符以及加减号和负数的处理
int isspace( int ch ):
定义:检查给定的字符是否空白符,即空格( 0x20 )、换行( 0x0a )、回车( 0x0d )、水平制表符( 0x09 )或垂直制表符( 0x0b )之一。
若 ch 的值不能表示为 unsigned char 且不等于 EOF ,则行为未定义。
返回:若字符为空白符则为非零值,否则为零。
int isdigit( int ch ):
检查给定的字符是否数字字符( 0123456789 )。
若 ch 的值不能表示为 unsigned char 且不等于 EOF ,则行为未定义。
return:若字符为数字则为非零值,否则为零。
*/
int atoi2(char s[]) {
int i, n,sign;
for (i = 0; isspace(s[i]); i++) {//跳过字符串前面的空白符
;
}
sign = (s[i] == '-') ? -1 : 1;//用于判断该数是否为负数
if (s[i] == '+' || s[i] == '-');//跳过符号
i++;
for (n = 0; isdigit(s[i]); i++) {
n = n * 10 + (s[i] - '0');
}
return sign * n;
}
输出:
123
-123
--------------------------------
Process exited after 0.01193 seconds with return value 0
请按任意键继续. . .