Написать программу:
Найти сумму чисел, встречающихся в тексте (соседние цифры считать как одно число).
Благодарю за любую помощь!
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. Программа принимает все числа в строке положительными и целыми
#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. Программа принимает все числа в строке положительными и целыми
https://pastebin.com/zcFG5E7P
пока положительные
пока положительные
- непосредственно перед числом будет восприниматься как минус. Текст читается из файла text.txt, находящего в папке с исполняемым файлом


Похожие вопросы
- Написать программу на языке Си
- Написать программу на языке Си, которая решит эту задачу:
- Программа на СИ. Циклы с постусловием и предусловием
- Помогите пожалуйста написать программу на Си
- Помогите пожалуйста решить программу на языке СИ!!!
- Помогите исправить программу на языке СИ, работает коряво.
- Составьте программу удаления столбца, содержащего максимальный элемент матрицы A[N][N] НА ЯЗЫКЕ СИ
- Помогите с программой на языке Си
- Язык Си Составить ГСА и программу расчета значения R
- Решить задачу на языке СИ
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;
}