Форум программистов, компьютерный форум, киберфорум
Наши страницы

Создать файл и внести в него последовательность символов. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удалить из строки все слова, которые начинаются на заглавную букву http://www.cyberforum.ru/cpp-beginners/thread99990.html
слова в строке могут разделяться пробелами и знаками препинания,в конце "." необходимо удалить из строки все слова,которые начинаются на заглавную букву,прошу очень помочь,именно с удалением слова по...
C++ Системное время как взять системное время в милисикундах? http://www.cyberforum.ru/cpp-beginners/thread99989.html
Cистемы счисления, на языке С++ (объясните пожалуйста) C++
//--------------------------------------------------------------------------- #include <string> #include <iostream> #include <vcl.h> #pragma hdrstop ...
C++ Определить силу притяжения F между телами
помогите, пожалуйста решить задачку: определить силу притяжения F между телами массами m1 и m2, находящимися на расстоянии r друг от друга... решить её надо в Visual C++
C++ два дня немогу сделать прогу.... http://www.cyberforum.ru/cpp-beginners/thread99949.html
Ведомость успеваемости студентов (2 класса: базовый - студент; производный - студент ведомости успеваемости) Базовый класс (студент): Переменные: имя, возраст, высшее учебное заведение....
C++ выполнение несложных заданий на С (графика,матрица,массив) необходимо выполнить 3 задачи на С : 1.графика-кораблик в движении,из трубы идёт дым(думаю можно и без дыма) 2.матрицы-дан двумерный массив(любой),расположить нечётные цифры по возрастанию,чётные... подробнее

Показать сообщение отдельно
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.03.2010, 04:53
Цитата Сообщение от Sandr12
Создать файл и внести в него последовательность символов. Вывести из этого файла в результирующий файл символы в обратной последовательности(зеркальное отображение).
нужен стек, так как непрерывный кусок в памяти для всего файла может не найтись

было дело

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct node {
    char *p;
    struct node *next;
};
 
struct stack {
    struct node *head;
};
 
void CreateStack(struct stack *ps);
int PushStack(struct stack *ps, struct node *pn);
int PopStack(struct stack *ps, struct node *pn);
 
char *MemDupLine(const char *l, size_t size);
void MemRevLine(char *l, size_t n);
 
enum {
    MAXLINE = 1000 /* maximal length of a line (equiv. to int) */
};
 
int main(void) /* C89 ANSI */
{
    char line[MAXLINE];
    int c, i;
    int maxlength, lastlength;
    
    struct stack s;
    struct node n;
    
    CreateStack(&s);
    
    maxlength = sizeof line;
    lastlength = 0;
    
    i = 0;
    
    do {
    
        if ((c = getchar()) != EOF)
            line[i++] = c;
    
        if (i >= maxlength || (c == EOF && i > 0)) {
        
            if (c == EOF && i > 0)
                lastlength = i;
        
            n.p = MemDupLine(line, i);
            
            MemRevLine(n.p, i);
            
            if(PushStack(&s, &n) == 0) {
                fprintf(stderr, "error: not enough memory" "\n");
                exit(EXIT_FAILURE);
            }    
            
            i = 0;
        
        }
    
    } while (c != EOF);
    
    while (PopStack(&s, &n) != 0) {
        
        if (lastlength == 0)
            fwrite(n.p, maxlength, 1, stdout);
        else {
            fwrite(n.p, lastlength, 1, stdout);
            lastlength = 0;
        }
        
        free(n.p);
    
    }    
    
    exit(EXIT_SUCCESS);
}
 
/* MemRevLine:  reverses n bytes in line l  */
void MemRevLine(char *l, size_t n)
{
    char *end;
    int c;
    
    end = l+n-1;
 
    for ( ; l < end; l++, end--)
        c = *l, *l = *end, *end = c;
}
 
/* MemDupLine:  duplicates size bytes of line l */
char *MemDupLine(const char *l, size_t size)
{
    char *p;
    
    p = (char *) malloc(size);
    
    if (p != NULL);
        memcpy(p, l, size);
    
    return p;
}
 
/* CreateStack:  creates a clear stack ps */
void CreateStack(struct stack *ps)
{
    ps->head = NULL;
}
 
/* PushStack:  pushes to a stack ps a node pn;
               returns 1 or 0 */
int PushStack(struct stack *ps, struct node *pn)
{
    struct node *tmp;
    
    tmp = (struct node *) malloc(sizeof(struct node));
    
    if (tmp == NULL)
        return 0;
    
    *tmp = *pn;
    tmp->next = ps->head;
    ps->head = tmp;
    
    return 1;
}
 
/* PopStack:  pops from a stack ps a node pn;
              returns 1 or 0 */
int PopStack(struct stack *ps, struct node *pn)
{
    struct node *tmp;
    
    if (ps->head == NULL)
        return 0;
    
    tmp = ps->head;
    *pn = *tmp;
    ps->head = tmp->next;    
    free(tmp);
    
    return 1;
}


Добавлено через 2 минуты
тут ввод с клавиатуры нужно заменить на ввод из файла
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru