atoi沮丧

时间:2014-12-27 07:30:40

标签: c visual-studio-2012 atoi

我迷失在这里。什么目的?取一个字符串并使其成为一个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;
}

3 个答案:

答案 0 :(得分:3)

显然,你没有&#34;从书中抄写这个单词&#34;。

您在if声明中使用作业而不是比较

更改此内容:

s[i] = '-'

对此:

s[i] == '-'

答案 1 :(得分:1)

我的atoi手册页读取(部分),

  

atoi()函数转换指向的字符串的初始部分   到nptrint。行为与

相同
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;
}