Функция, которая вычисляет числа в строке - PullRequest
0 голосов
/ 14 мая 2011

Я пишу функцию, которая вычисляет числа в строке. пример: "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 ]

2 голосов
/ 14 мая 2011

Попробуйте это:

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 должен указывать на недопустимый адрес памяти или не имеет нулевого конца.

2 голосов
/ 14 мая 2011

Вы не перемещаете указатель на строку, поэтому вы будете проверять только первое значение, а не другие.Также вам нужно перейти от значения ascii к целочисленному значению.Это должно быть что-то вроде:

if ( str[i] >= 48 && str[i] <= 57 ) {
  temp += str[i] - '0';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...