Подсчет суммы чисел в строке не используя функции 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);
}
Объяснение кода листинга программы
- В этом коде используется стандартная библиотека языка C.
- Задача программы - подсчитать сумму чисел в строке.
- Строка для подсчета суммы чисел:
asd 55 posd 4 fff 41. - В начале программы объявляется указатель на строку с этой строкой.
- Затем объявляется переменная типа unsigned для хранения суммы чисел.
- Далее в цикле for происходит проход по строке с помощью указателя p.
- На каждой итерации цикла проверяется корректность чтения числа с помощью функции sscanf.
- Если число успешно прочитано, оно добавляется к сумме.
- Если чтение числа не удалось, то с помощью функции sscanf считывается количество символов, которые должны быть пропущены (чтобы пропустить число, которое не является числом).
- После каждой итерации указатель p увеличивается на количество символов, которые должны быть пропущены.
- В конце программы выводится сумма чисел.
- Ответ: 55.