Обработка символьных строк - 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;
}

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

  1. В данном коде используется язык программирования C.
  2. Задача программы - обработка символьных строк.
  3. Код содержит функции:
    • output_text - выводит содержимое файла, обрабатывая строки с использованием символов '{' и '}'.
    • offset_end - находит конец строки и выделяет сумму чисел в строке.
    • str_to_int - преобразует строку в целое число.
  4. В функции output_text происходит обработка каждой строки из файла. Если символ '}' встречается в строке, то выводится сумма чисел, заключенных в скобки.
  5. В функции offset_end происходит поиск конца строки и подсчет суммы чисел в строке.
  6. В функции str_to_int происходит преобразование строки в целое число.
  7. В основной функции main происходит открытие файла file.txt для чтения и вызов функции output_text для вывода содержимого файла.
  8. В конце программы происходит закрытие файла и считывание символа из стандартного ввода для определения конца работы программы.

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


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

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

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