Подсчет суммы чисел в строке не используя функции string.h - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток.Задача состоит в том , чтобы подсчитать сумму чисел в строке, слова в которой могут состоять только из цифр или букв.Моя проблема состоит в том, что я не могу понять как сказать компилятору не считывать каждый символ в строке. Для лучшего пояснения что мне нужно, прибегну к математике, если я введу asd 55 posd 41, в коде ниже sum = 18, мне нужно чтобы sum = 96
include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <malloc.h>
void main()
{
    setlocale(LC_ALL, "Rus");
    int i;
    int sum = 0;
    char *str;
    str = (char *)malloc(10);
 
    printf("Введите строку:");
 
    gets(str);
 
     for (i = 0;str[i] != 0; i++)
    {
        if (str[i] >= '0' && str[i] <= '9' )
        {
            sum += str[i] - '0';
        }
    }
    printf("sum=%d\n", sum);
 
    return 0;
}

Решение задачи: «Подсчет суммы чисел в строке не используя функции string.h»

textual
Листинг программы
#include <stdio.h>
 
int main()
{
  const char *str = "asd 55 posd 4 fff 41";
  
  unsigned sum = 0;
    
  for (const char *p = str; *p != '\0'; )
  {
    unsigned v, n;
    if (sscanf(p, "%u%n", &v, &n) == 1)
      sum += v;
    else 
      sscanf(p, "%*s%n", &n);
      
    p += n;
  }
  
  printf("%u\n", sum);
}

Объяснение кода листинга программы

  1. В этом коде используется стандартная библиотека языка C.
  2. Задача программы - подсчитать сумму чисел в строке.
  3. Строка для подсчета суммы чисел: asd 55 posd 4 fff 41.
  4. В начале программы объявляется указатель на строку с этой строкой.
  5. Затем объявляется переменная типа unsigned для хранения суммы чисел.
  6. Далее в цикле for происходит проход по строке с помощью указателя p.
  7. На каждой итерации цикла проверяется корректность чтения числа с помощью функции sscanf.
  8. Если число успешно прочитано, оно добавляется к сумме.
  9. Если чтение числа не удалось, то с помощью функции sscanf считывается количество символов, которые должны быть пропущены (чтобы пропустить число, которое не является числом).
  10. После каждой итерации указатель p увеличивается на количество символов, которые должны быть пропущены.
  11. В конце программы выводится сумма чисел.
  12. Ответ: 55.

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы