Отделить цифры от букв и найти сумму цифр - 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;
}

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

Выделим в виде списка элементы кода, описывая их назначение:

  1. #include Указывает компилятору включить в программу функции файла стандартного ввода/вывода, нужные для отправки сообщений в консоль
  2. #include Подключает функции файла ctype.h, позволяющие работать со строками и определять является ли символ буквой или цифрой
  3. *int sum(const char s) {...}** Функция принимает на вход указатель на строку символов и возвращает сумму цифр в ней
  4. *return ( s == '\0' ) ? 0 : ( isdigit(s) ) ? s - '0' + sum(s+1) : sum(s+1);** Внутри функции происходит рекурсивный обход строки. Если текущий символ является концом строки (т.е. '\0'), то возвращается 0. Если символ является цифрой, то он преобразуется в целое число и добавляется к сумме, после чего вызывается функция sum для следующей цифры
  5. int main(void){...} Главная функция программы, которая организует взаимодействие с пользователем
  6. char buf[BUFSIZ]; Объявление переменной-массива типа char для хранения строки, вводимой пользователем
  7. *while ( printf(String:) && fgets(buf, BUFSIZ, stdin) && buf != '\n' )** Организация цикла, который будет выполняться до тех пор, пока пользователь не введет пустую строку (т.е. не нажмет Enter)
  8. printf(Sum of digits: %d\n, sum(buf)); Внутри цикла выводится сообщение с суммой цифр в введенной строке
  9. return 0; Обозначает успешный конец работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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