Язык C - добавьте цифры продуктов (т. Е. Не сами продукты) - PullRequest
0 голосов
/ 07 марта 2019

Я рассчитываю рассчитанную ниже сумму, но используя цифры продуктов, а не сами продукты:

Это начальные значения:

2 + 12 + 8 = 22 * ​​1005 *

но я хочу добиться следующего: цифра 12 фактически рассматривается как 1 и 2 отдельно

2 + 1 + 2 + 8 = 13

ИспользованиеНа языке C есть формула, в которой я могу использовать для выполнения этой задачи?

Ответы [ 3 ]

1 голос
/ 07 марта 2019

Если + является единственным другим токеном, вы можете игнорировать его и просто суммировать цифры в потоке.Так что

#include <stdio.h>
#include <ctype.h> // for isdigit

int main(void)
{
    char* s = "2 + 12 + 8";
    int total = 0;
    for (; *s; ++s){
        if (isdigit((unsigned char)*s)){
            total += *s - '0';
        }
    }
    printf("%d\n", total);
}

- это один из способов.*s - '0'; - идиоматический способ преобразования цифры char в ее числовое значение.Условием завершения цикла является NUL-терминатор в строке s.

. Скорее всего, это не лучший подход, если вы хотите использовать другие операторы между терминами.На этом этапе вам нужно создать синтаксический анализатор полного выражения (например, на основе обработанного примера в Kernighan & Ritchie).

1 голос
/ 07 марта 2019

Предположим, у вас есть массив значений, которые вы можете сделать:

#include <stdio.h>

unsigned sum(const unsigned * a, size_t sz)
{
  unsigned sum = 0;

  while (sz--) {
    unsigned v = *a++;

    while (v) {
      sum += v%10;
      v /= 10;
    }
  }

  return sum;
}

int main()
{
  const unsigned a[] = { 2, 12, 8 };

  printf("sum = %u\n", sum(a, sizeof(a)/sizeof(*a)));
}

Компиляция и исполнение:

/tmp % gcc -pedantic -Wextra s.c
/tmp % ./a.out
sum = 13
0 голосов
/ 07 марта 2019

Нет прямой формулы для этой задачи, но вы можете выполнить эту задачу в отдельной функции и использовать эту функцию там, где это необходимо.Вот два простых решения, которые зависят от типа ввода.

Если Ввод имеет вид String (т.е. "2 + 12 + 8"), тогда код будет -

#include <stdio.h>

int main()
{
    char str[] = "2 + 12 + 8";
    int sum=0;

    for (int i = 0; i < strlen(str); i++) {
        if (str[i] >= '0' && str[i] <= '9')
            sum += str[i] - '0';
    }
    printf("%d",sum);
    return 0;
}

Если Ввод имеет вид Массив (т.е. [2, 12, 8]), тогда код будет -

#include <stdio.h>

int main()
{
    int num[] = {2, 12, 8};
    int sum=0;
    int length = sizeof(num) / sizeof(num[0]);

    for (int i = 0; i < length; i++) {
        while (num[i]) {
            sum += num[i] % 10;
            num[i] /= 10; 
        }
    }
    printf("%d",sum);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...