Используя очередь переписать содержимое текстового файла - 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;
}