字符串到整数

时间:2017-10-19 15:27:36

标签: c

使用我的程序,我需要将包含的数字返回到字符串中 我的程序似乎工作,但可以肯定,我需要显示数字。事情是,它似乎陷入了ascii 例如,如果我的号码是12,我只能显示1068 我想提示能够显示(使用printf或write函数)字符串" abcd12"中包含的数字。 无论如何,这是我的程序(通常显示nbr的值,每次迭代的迭代次数,以及他的最终值到主体中):

int my_getnbr(char const *str) {
    int i = 0;
    int nbr;
    int power = 1;

    while (str[i] != '\0') {
            if (str[i] <= '9' && str[i] >= '0') {
                    nbr = nbr * power + str[i] + '0';
                    printf("%d\n", nbr);
                    power = power * 10;
            }
            i++;
    }

    return (nbr); 
}

int main() {
    int nbr;

    nbr = my_getnbr("abcd12");
    printf("nbr = %d\n", nbr);

    return (0); 
}

2 个答案:

答案 0 :(得分:1)

你的概念很好,只是稍作微调。

  • 您尚未设置nbr。将它初始化为零,这样你就有了一个已知的起点。
  • 无需power。只需将每次迭代乘以10即可。
  • 关键细节:'0' ASCII字符。如果转换为整数,则恰好是数字48.尝试:

    nbr = nbr * 10 + str[i] - '0';
    

很清楚意图,硬编码意思而不是值,并且应该让你超越终点线。

小调:

  • 为了清晰代码,建议在比较范围值时像数学家一样思考。

    if (str[i] <= '9' && str[i] >= '0') {
    

    这没有错,但是如果它是一个ASCII数字,那么需要精神上的第二个说#34;啊。然而,如果您重新排序如下:

    if ('0' <= str[i] && str[i] <= '9') {
    

    对称性更自然,在视觉上放置您在边界之间测试的变量。在轶事经历中,一个小细节很重要。

答案 1 :(得分:-1)

可以简化为:

nbr = 0;
while (*str) {
        if (isdigit(*str)) 
        {
                nbr *= 10;
                nbr += *str++ - '0';
        }
}