Сумма чисел в Строковом Типе - C (СИ)
Формулировка задачи:
Доброго времени суток друзья.
Вопрос такой, как мне сделать функцию делающую сумму чисел в Строковом Типе.
пример:
я ввел такой тип: dgGsdHfgS32fg dfr 3 fgfg.
фуннкция делает сумму 32+3 и возвращает 35.
есть идеи?
заранее спасибо
Решение задачи: «Сумма чисел в Строковом Типе»
textual
Листинг программы
#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
unsigned long str_sum(const char *str)
{
unsigned long sum = 0;
const char *p = str;
do
{
for (;*p != '\0' && !isdigit(*p); ++p);
if (*p == '\0')
break;
char *end;
errno = 0;
unsigned long num = strtoul(p, &end, 10);
if (errno != ERANGE)
sum += num;
p = end;
} while (1);
return sum;
}
int main(void)
{
const char *str = "dgGsdHfgS32fg dfr 3 fgfg";
printf("%lu\n", str_sum(str));
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функциями стандартного ввода/вывода, обработки ошибок и работы со строками.
- Определяем функцию
str_sum, которая принимает в качестве аргумента указатель на строку символов и возвращает сумму всех чисел в этой строке. - Инициализируем переменную
sumсо значением 0, которая будет использоваться для хранения суммы чисел. - Создаем указатель
p, который будет использоваться для перемещения по строкеstr. - Запускаем цикл
do, который будет выполняться до тех пор, пока не встретит символ '\0'. - Внутри цикла
doиспользуем вложенный циклfor, чтобы проверить каждый символ в текущем числе на цифру. - Если текущий символ является числом, то преобразуем его в тип
unsigned longс помощью функцииstrtoul. - Проверяем, было ли ошибкой преобразование числа и если нет, то добавляем полученное число к переменной
sum. - Перемещаем указатель
pна символ, следующий за последним числом. - После выхода из вложенного цикла
forпроверяем, достигли ли мы конца строки. Если да, то выходим из циклаdo. - Возвращаем значение переменной
sumиз функцииstr_sum. - В функции
mainопределяем строкуstr, которую будем использовать для тестирования функцииstr_sum. - Вызываем функцию
str_sumс аргументомstrи выводим результат на экран с помощью функцииprintf. - В данном случае выведется значение суммы всех чисел в строке
dgGsdHfgS32fg dfr 3 fgfg, равное 33.