我在这里迷路了。目的是什么?获取一个字符串并将其转换为整型?或者将字符转换为ASCII?如果我使用任何数字作为char s[],我会得到返回的数字。如果我使用任何字母,我得到一个0。这个输出正确吗?如何测试返回类型以确定发生了转换?
//atoi: convert s to integer
#include <stdio.h>
#include <string.h>
int atoi(char s[])
{
int i, n;
n = 0;
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] - '0');
return n;
}
int main()
{
char s[] = "7";
printf("atoi = %d\n", atoi(s)); //atoi = 7...is this correct?
return 0;
}在K&Rs的第二个版本中,我得到了一个错误,if语句的左操作数必须是I-value。我从书上逐字逐句地抄了下来。我做错什么了?
#include <ctype.h>
#include <stdio.h>
//atoi: convert s to integer; version 2
int atoi(char s[])
{
int i, n, sign;
for (i = 0; isspace(s[i]); i++) //skip white space
;
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == '+' || s[i] = '-') //skip sign
i++;
for (n = 0; isdigit(s[i]); i++)
n = 10 * n + (s[i] - '0');
return sign * n;
}
int main()
{
char s[] = "9";
printf("atoi = %d\m", atoi(s));
return 0;
}发布于 2014-12-27 15:44:11
显然,你没有“从书中逐字逐句地抄袭”。
您在if语句中使用赋值而不是比较。
更改此设置:
s[i] = '-'To this:
s[i] == '-'发布于 2014-12-27 15:33:25
我的atoi手册页上写着(部分),
atoi()函数将nptr指向的字符串的初始部分转换为int。其行为与
strtol(nptr,NULL,10);
除了atoi()不检测错误之外。
tl;dr
是。atoi("7")应为7。在stdlib.h中可以找到标准的atoi
发布于 2014-12-27 15:39:15
atoi()的实现看起来是正确的,尽管可能应该处理前导加号或减号以与C库实现兼容。
主程序可以使用work,但就编码方法而言,您可能会添加几个测试用例来证明典型的输入类型正确工作:
int main()
{
const char tests[] = {"7", "0", "10", "99", "1000", "9999", "11111",
"99999", "12345678"};
int j;
for (j = 0; test[j]; ++j)
printf("atoi(%s) = %d\n", tests[j], atoi(tests[j]));
return 0;
}https://stackoverflow.com/questions/27665307
复制相似问题