Отделить цифры от букв и найти сумму цифр - C (СИ)
Формулировка задачи:
Есть массив,N размера.В массиве присутствуют буквы и цифры.Нужно отделить цифры от букв и найти сумму цифр:
отделяем буквы от цифр:
и итоге сумма всех цифр выводит не понятно что,как найти сумму всех чисел в массиве?
int NumSum(char s[])
{
int i,sum;
for (i=0;s[i]!=0;i++)
sum=int(( strchr ( "0123456789",s[i]) )+s[i]);
return sum;
}#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <Windows.h>
int NumDigits ( char s[] )
{
int i, count = 0;
for (i = 0; i < int (strlen(s)); i ++ )
if( strchr ( "0123456789", s[i] ) )
count ++;
return count;
}
int NumSum(char s[])
{
int i,sum;
for (i=0;s[i]!=0;i++)
sum=int(( strchr ( "0123456789",s[i]) )+s[i]);
return sum;
}
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char s[80];
int n,sum;
printf ( "Введите строку\n" );
gets_s(s);
n = NumDigits ( s );
sum = NumSum(s);
printf ( "Нашли %d цифр,сумма =%d", n,sum );
}Решение задачи: «Отделить цифры от букв и найти сумму цифр»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
int sum(const char * s){
return ( *s == '\0' ) ? 0 : ( isdigit(*s) ) ? *s - '0' + sum(s+1) : sum(s+1);
}
int main(void){
char buf[BUFSIZ];
while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
printf("Sum of digits: %d\n", sum(buf));
return 0;
}
Объяснение кода листинга программы
Выделим в виде списка элементы кода, описывая их назначение:
- #include
Указывает компилятору включить в программу функции файла стандартного ввода/вывода, нужные для отправки сообщений в консоль - #include
Подключает функции файла ctype.h, позволяющие работать со строками и определять является ли символ буквой или цифрой - *int sum(const char s) {...}** Функция принимает на вход указатель на строку символов и возвращает сумму цифр в ней
- *return ( s == '\0' ) ? 0 : ( isdigit(s) ) ? s - '0' + sum(s+1) : sum(s+1);** Внутри функции происходит рекурсивный обход строки. Если текущий символ является концом строки (т.е. '\0'), то возвращается 0. Если символ является цифрой, то он преобразуется в целое число и добавляется к сумме, после чего вызывается функция sum для следующей цифры
- int main(void){...} Главная функция программы, которая организует взаимодействие с пользователем
- char buf[BUFSIZ]; Объявление переменной-массива типа char для хранения строки, вводимой пользователем
- *while ( printf(
String:) && fgets(buf, BUFSIZ, stdin) && buf != '\n' )** Организация цикла, который будет выполняться до тех пор, пока пользователь не введет пустую строку (т.е. не нажмет Enter) - printf(
Sum of digits: %d\n, sum(buf)); Внутри цикла выводится сообщение с суммой цифр в введенной строке - return 0; Обозначает успешный конец работы программы