Здравствуйте, у меня проблема с программой, ошибка в адресах, если ввести больше 17 символов,
то программа начинает работать некорректно и после выхода выдает ошибки. Компилятор g++
компилировалась так: g++ fifo.cpp c++.cpp
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
| /*файл fifo.h*/
class fifo{
private:
char *data;
int size;
int top;
int bottom;
public:
fifo(int size);
~fifo();
void put(char elem); //помещение в стек
char get(); // извлечение из стека
int isempty();
int isfull();
};
/*файл fifo.cpp*/
#include "fifo.h"
fifo::fifo(int size){
data=new char(size);
top=0;
bottom=0;
this->size=size;
}
fifo::~fifo(){
delete data;
}
void fifo::put(char elem){
if (isfull( )) throw "buffer overflow";
data[top]=elem;
top=(top+1)%size;
}
char fifo::get(){
if (isempty()) throw "buffer underflow";
char result = data[bottom];
bottom=(bottom+1)%size;
return result;
}
int fifo::isfull(){
if (bottom==0 && top==size-1) return 1;
if (bottom-top==1) return 1;
return 0;
}
int fifo::isempty(){
return top==bottom;
}
/*файл программы c++.cpp*/
/*
Реализовать программу с использованием объектов типа стек или очередь.
6. На стандартный ввод программы поступает текст. Требуется при выводе его на
стандартный вывод перенести в конец каждой строки все входящие в неё гласные
латинские буквы с сохранением исходного взаимного порядка.
*/
#include "fifo.h"
#include <stdio.h>
char m[5] = {'a','e','o','i','u'}; //массив гласных для сравнения символов
fifo A(200); //буфер согласных
fifo B(200); //буфер гласных
int i; //счетчик
bool check = 0; //флаг проверки гласности
int main() {
char c;
do {
c = getc(stdin); //считывание символа со стандартного ввода
if (c == '\n') { //если ENTER - вывод буферов
printf("---Буфер---\n");
while (!A.isempty()) { //вывод согласных
printf("%c",A.get());
}
while (!B.isempty()) { //вывод гласных
printf("%c",B.get());
}
printf("\n");
} else { //иначе запись в буферы с проверками на гл-согл или выход
if (c == '1' || c == EOF) return 0;//если 1 - выход
else { //иначе проверка на гл-согл
for (i = 0; i < 5; i++) { //проверка на гласность
if (c == m[i]) { //сравнение с массивом гласных
check = 1; //флаг проверки гласности
}
}
if (!check) { //если 0 значит согласная
A.put(c); //добавление в буфер согласных
check = 0; //обнуление флага
} else { //иначе гласная
B.put(c); //добавление в буфер гласных
check = 0; //обнуление флага
}
}
}
} while(1);
} |
|