Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Дан текстовый файл, состоящий только из латинских букв. Необходимо инвертировать каждую строку файла, используя стек, и записать полученные строки в другой файл.




#include <fcntl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <io.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

// Структура, описывающая элемент стека

struct stack {

char info;

stack* prev;

stack() { prev=0; info=0; }

};

// Указатель на вершину стека

stack *stack_top=0;

// Проверка содержимого вершины стека

int top()

{

if(stack_top==0)

return(0);

 

return(stack_top->info);

}

// Добавление элемента в стек

void push(char value)

{

stack *p = new stack;

 

p->info = value;

p->prev = stack_top;

stack_top = p;

}

// Снятие верхнего элемента стека

char pop()

{

char value;

stack *p;

 

value = stack_top->info;

p = stack_top->prev;

 

delete stack_top;

stack_top = p;

 

return(value);

}

// проверка стека на пустоту

int empty()

{

if(stack_top==0) return(1);

return(0);

}

// запись строки в файл

void write_file(char string[])

{

int fh2;

unsigned byteswritten;

 

if((fh2 = _open("str2.dat", _O_RDWR | _O_CREAT, _S_IREAD | _S_IWRITE))!= -1) {

if((byteswritten = _write(fh2, string, strlen(string))) == -1)

perror("Write failed");

else

printf("Wrote %u bytes to file\n", byteswritten);

}

 

_close(fh2);

}

 

char buffer[100];

 

void main()

{

int fh;

unsigned int i, cnt=0, nbytes = 100, bytesread;

 

/* Open file for input: */

if((fh = _open("str1.dat", _O_RDONLY)) == -1)

{

perror("open failed on input file");

exit(1);

}

 

/* Read in input: */

if((bytesread = _read(fh, buffer, nbytes)) <= 0) {

perror("Problem reading file");

exit(1);

}

 

char str[100];

memset(str,0,100);

 

for(i=0; i<bytesread; i++) {

if(buffer[i]==0x0a) {

while(!empty()) {

cnt += sprintf(str+cnt, "%c", pop());

}

cnt += sprintf(str+cnt, "%c", 0x0a);

}

else {

push(buffer[i]);

}

}

write_file(str);

 

while(!empty()) {

printf("%c ", pop());

}

printf("\n");

_close(fh);

 

}

 

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных