Используя очередь переписать содержимое текстового файла - C (СИ)
Формулировка задачи:
Используя очередь, решить следующую задачу. Содержимое текстового файла f, разделенное на строки, переписать в текстовый файл g, перенося при этом в конец каждой строки все входящие в нее цифры (с сохранением исходного порядка как среди цифр, так и среди остальных символов очереди).
Пожалуйста, помогите с кодом или примерным алгоритмом последовательности действий, буду очень благодарная любой помощи!
Решение задачи: «Используя очередь переписать содержимое текстового файла»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> #include <string.h> typedef struct _deque { char* buf; size_t left; size_t right; size_t cnt; } deque_t; void deque_init(deque_t* deq, char* _pbuf); int deque_offset(deque_t* deq, const char* s, size_t size); void deque_add_front(deque_t* deq, char c); void deque_add_back(deque_t* deq, char c); char* deque_c_str(deque_t* deq); int part_pcopy(FILE* fin, FILE* fout){ char buf[512], dbuf[512], *s; size_t len; deque_t deq; deque_init(&deq, dbuf); while(fgets(buf, sizeof(buf), fin)){ len = strlen(buf); if((len > 0) && (buf[len - 1] == '\n')) buf[--len] = '\0'; if(deque_offset(&deq, buf, len)){ for(s = &buf[0]; *s; ++s){ if(isdigit(*s)) deque_add_back(&deq, *s); else deque_add_front(&deq, *s); } fputs(deque_c_str(&deq), fout); } else fputs(buf, fout); if(! feof(fin)) fputc('\n', fout); } fflush(fout); return 1; } int main(void){ FILE* fin = fopen("input.txt", "r"); FILE* fout = fopen("output.txt", "w+"); part_pcopy(fin, fout); fclose(fin); fclose(fout); return 0; } void deque_init(deque_t* deq, char* _pbuf){ deq->buf = _pbuf; deq->left = 0; deq->right = 0; deq->cnt = 0; } int deque_offset(deque_t* deq, const char* s, size_t size){ deq->left = 0; deq->right = size; deq->cnt = size; while(*s){ if(isdigit(*s++)) --(deq->right); } return (deq->right != size); } void deque_add_front(deque_t* deq, char c){ deq->buf[deq->left++] = c; } void deque_add_back(deque_t* deq, char c){ deq->buf[deq->right++] = c; } char* deque_c_str(deque_t* deq){ deq->buf[deq->cnt] = '\0'; return deq->buf; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д