C/C++

Программа язык Си

Написать программу:
Найти сумму чисел, встречающихся в тексте (соседние цифры считать как одно число).
Благодарю за любую помощь!
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define BUFFER 1024
void shift(char* beg, char* end) {
char x = *beg;
char* prev = beg;
++beg;
while (beg != end) {
*prev = *beg;
++prev;
++beg;
}
*prev = x;
}
void trim(char* line) {
int i = 0;
char* end = line + strlen(line);
while (line[i] && i < BUFFER - 1 && line[i] > 0 && isspace(line[i])) {
shift(&line[i], end);
}
i = strlen(line) - 1;
while (line[i] > 0 && isspace(line[i])) line[i--] = 0;
for (i = 0; line[i]; ++i) {
if (line[i - 1] == ' ' && line[i] == ' ') {
while (line[i] && line[i] > 0 && isspace(line[i])) {
shift(&line[i], end);
if (line + strlen(line) == end) {
line[strlen(line) - 1] = 0;
}
end = line + strlen(line);
}
}
}
}
void digits_only(char* digits, char* text) {
int i;
for (i = 0; text[i] && i < BUFFER - 1; ++i) {
if (text[i] > 0 && isdigit(text[i])) digits[i] = text[i];
else digits[i] = ' ';
}
digits[i] = 0;
trim(digits);
}
int main(void) {
char text[BUFFER];
char digits[BUFFER];
char* token = NULL;
char* next_token = NULL;
unsigned long long sum = 0;
printf("Text: ");
fgets(text, BUFFER, stdin);
digits_only(digits, text);
token = strtok_s(digits, " ", &next_token);
sum += atoll(token);
while (token != NULL) {
token = strtok_s(NULL, " ", &next_token);
if (token) sum += atoll(token);
}
printf("Sum: %llu\n", sum);
system("pause > nul");
return 0;
}

P.S. Программа принимает все числа в строке положительными и целыми
Алексей 77
Алексей 77
84 304
Лучший ответ
https://pastebin.com/zcFG5E7P
пока положительные
Анатолий Данцов а если в инструкцию else добавишь
if (Text[a]=='-') Num*=-1;
то считает и отрицательные числа
позже можно и для вещественных добавить если нужно
Анатолий Данцов А если совсем просто и угловые скобки поставить к заголовку
#include windows.h
#include stdio.h

int main()
{
char Text[128]= "0abcde -12 fghi239jklmn 1 opqr-20stuvw 509 xyz 34 ";

int Num= 0; int coef= 1; int sum=0; int code;

for (int a= strlen(Text)-1; a>-1; a--)
{
code= Text[a]-48;
if (code<10 && code>-1) { Num= Num+(Text[a]-48)*coef; coef*=10; }
else { if (Text[a]=='-') Num*=-1; coef= 1; sum+= Num; Num= 0; }
}

printf("%s\n", Text);
printf("\nСумма должна быть= 751, а получилось %d\n", sum);
system("pause");

return 0;
}
- непосредственно перед числом будет восприниматься как минус. Текст читается из файла text.txt, находящего в папке с исполняемым файлом
Сергей Зленко
Сергей Зленко
3 568