以字符串形式计算数字的函数

时间:2011-05-14 18:14:41

标签: c

我编写用字符串计算数字的函数。 例: “t5ds5” 程序返回10 = 5 + 5。 我运行程序时遇到错误。 这里的代码!

int SumStr(char *str)
{
    int i;
    int temp = 0;
    for(i=0;i<strlen(str);i++)
    {
        if(*str >= 48 && *str <= 57)
        {
            temp +=*str;
        }
    }
    printf("%d", temp);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您没有将指针移动到字符串,因此您只会检查第一个值而不会检查任何其他值。您还需要从ascii值向下移动到整数值。它应该是这样的:

if ( str[i] >= 48 && str[i] <= 57 ) {
  temp += str[i] - '0';
}

答案 1 :(得分:2)

试试这个:

int SumStr(char *str)
{
    int temp = 0;
    while(*str)
    {
        if((*str >= '0') && (*str <= '9'))
            temp += *str - '0';
        str++;
    }
    printf("%d", temp);
    return 0;
}

虽然这似乎更正常:

int SumStr(char *str)
{
    int result = 0;
    while(*str)
    {
        if((*str >= '0') && (*str <= '9'))
            temp += *str - '0';
        str++;
    }
    return result;
}

使用SumStr("t5ds5")调用函数会得到10的预期结果。

您的代码没有推进str,因此您每次循环检查相同的字符。它每次绕循环调用strlen(),这使算法O(n ^ 2)不理想。你可以按照上面的代码一次走弦。

至于为什么您的代码产生了访问冲突,这必须是由于您未显示的代码部分所致。我们只能想象str必须指向无效的内存地址或不是以空值终止。