Обработка символьных строк - C (СИ)
Формулировка задачи:
Сформировать и вывести на экран текстовый файл содержащий только последовательности символов, которые содержатся внутри операторных скобок "{" - "}". Перевести в этих строках символы в их числовое представление и подсчитать их сумму.го
Задали нам задание ничего не объяснив. Прошу помощи!
Решение задачи: «Обработка символьных строк»
textual
Листинг программы
#include <stdio.h>
#define CB_MAX 256
char* str_to_int(char* s, int* num);
char* offset_end(char* p, int* sum, int c, int* dg);
void output_text(FILE* _out, FILE* _in, char x, char y);
int main(void){
FILE* fp = fopen("file.txt", "r");
if(fp != NULL){
output_text(stdout, fp, '{', '}');
fclose(fp);
}
getchar();
return 0;
}
//вывод содержимого
void output_text(FILE* _out, FILE* _in, char x, char y){
char s[CB_MAX], *p, *i;
int sum, dg = 0, g = 0;
while((p = fgets(s, CB_MAX, _in)) != NULL){
if(g){
i = offset_end(p, &sum, y, &dg);
fprintf(_out, "%.*s", (int)(i - p), p);
if(*i == y){
if(dg)
fprintf(_out, " sum: %d", sum);
fputc('\n', _out);
p = i + 1;
goto __next;
}
} else {
__next:
for(sum = g = 0; *p; ){
if(*p == x){
i = offset_end(++p, &sum, y, &dg);
fprintf(_out, "%.*s", (int)(i - p), p);
if(*i == y){
if(dg)
fprintf(_out, " sum: %d", sum);
fputc('\n', _out);
sum = g = 0;
p = i + 1;
} else {
g = 1;
break;
}
} else
++p;
}
}
}
}
//суммирование и выделение конца строки
char* offset_end(char* p, int* sum, int c, int* dg){
int n, s = 0;
*dg = 0;
while(*p && (*p != c)){
if(*p >= '0' && *p <= '9'){
p = str_to_int(p, &n);
s += n;
*dg = 1;
} else
++p;
}
*sum = s;
return p;
}
//из строки в число
char* str_to_int(char* s, int* num){
int n = 0;
for(; *s >= '0' && *s <= '9'; ++s)
n = n*10 + (*s - '0');
*num = n;
return s;
}
Объяснение кода листинга программы
- В данном коде используется язык программирования C.
- Задача программы - обработка символьных строк.
- Код содержит функции:
output_text- выводит содержимое файла, обрабатывая строки с использованием символов '{' и '}'.offset_end- находит конец строки и выделяет сумму чисел в строке.str_to_int- преобразует строку в целое число.
- В функции
output_textпроисходит обработка каждой строки из файла. Если символ '}' встречается в строке, то выводится сумма чисел, заключенных в скобки. - В функции
offset_endпроисходит поиск конца строки и подсчет суммы чисел в строке. - В функции
str_to_intпроисходит преобразование строки в целое число. - В основной функции
mainпроисходит открытие файлаfile.txtдля чтения и вызов функцииoutput_textдля вывода содержимого файла. - В конце программы происходит закрытие файла и считывание символа из стандартного ввода для определения конца работы программы.