我迷失在这里。什么目的?取一个字符串并使其成为一个int?或者将字符转换为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&amp; Rs第二版中我得到一个错误,即if语句的左操作数必须是I值。我从书中复制了这个单词。我做错了什么?
#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;
}
答案 0 :(得分:3)
显然,你没有&#34;从书中抄写这个单词&#34;。
您在if
声明中使用作业而不是比较。
更改此内容:
s[i] = '-'
对此:
s[i] == '-'
答案 1 :(得分:1)
我的atoi
手册页读取(部分),
相同
atoi()
函数转换指向的字符串的初始部分 到nptr
到int
。行为与strtol(nptr, NULL, 10);
,但
atoi()
未检测到错误。
<强> TL;博士强>
是。 atoi("7")
应为7
。标准atoi
可以在stdlib.h
答案 2 :(得分:0)
atoi()
的实现看起来是正确的,但可能应该处理一个前导加号或减号以与C库实现兼容。
主程序可以使用工作,但就编码方法而言,您可以添加几个测试用例来证明典型的输入类型正常工作:
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;
}