Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zadachi_OOP_SPIOS_Assembler.doc
Скачиваний:
4
Добавлен:
28.10.2018
Размер:
314.37 Кб
Скачать

14.4 // Дан файл символов. Сформировать линейный список. Просмотреть линейный список из головы и составить из

// символов строку.

#include <fcntl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <io.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct list

{

char info;

list *prev;

list *next;

list() { prev=NULL; next=0; info=0; }

};

void insert_post(list *, char);

void printList(list *);

char * createString(list *);

list *first=0;

list *last=0;

char buffer[100];

void main( void )

{

int fh;

unsigned int i, nbytes = 100, bytesread;

list *p;

/* Open file for input: */

if((fh = _open("symbol.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);

}

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

if(buffer[i]==0x0a) continue;

p=last;

insert_post(p, buffer[i]);

}

printList(first);

printf("The string of item is %s\n", createString(first));

_close(fh);

}

/* вставка элемента после текущего */

void insert_post(list *q, char value)

{

list *p = new list;

if (q != 0)

{

p->next = q->next;

p->prev = q;

}

p->info = value;

if (q == 0)

{

first = p;

last = p;

}

else

{

if (q->next == 0) last = p;

else q->next->prev = p;

q->next = p;

}

}

char * createString(list *q)

{

char str[100];

memset(str,0,100);

unsigned int cnt = 0;

while(q!=NULL) {

cnt += sprintf(str+cnt, "%c", q->info);

q = q->next;

}

return str;

}

/* Print the list */

void printList(list *q)

{

if (q == 0)

printf("List is empty.\n\n");

else

{

printf("The list is:\n");

while (q != 0)

{

printf("%c-> ", q->info);

q = q->next;

}

printf("NULL\n\n");

}

}

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

#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);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]