E
ermackprogramis
Всем привет! Уважаемые програмисты, дайте совет.
Мне нужно узнать сколько раз в стеке повторяется каждый елемент. Я перепробовал мого чего, но ничего не выходит.
Вот програма, но не могу найти ошибку у подсчете вхожджения елемента в стек. (последняя функция)
Мне нужно узнать сколько раз в стеке повторяется каждый елемент. Я перепробовал мого чего, но ничего не выходит.
Вот програма, но не могу найти ошибку у подсчете вхожджения елемента в стек. (последняя функция)
C++:
// подключение библиотек
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
// прототипы функций
void input();
void output();
void push();
void stack();
void outstack();
void number();
// оглашение переменных
FILE *In,*Out; // указатель на файли
char word[15];
struct Stack
{
char data[50]; // поле
Stack* next; //указатель на слкдующий компонент
}*head,*current; // указатель на голову и текущий елемент стека
//==главная функция==
int main()
{
while(true)
{
system("cls");
puts("=====================================");
// меню
cout<<" Menu"<<endl;
cout<<"1. Input data to file"<<endl;
cout<<"2. Output data"<<endl;
cout<<"3. Build the stack"<<endl;
cout<<"4. Output stack"<<endl;
cout<<"5. Number of equal words"<<endl;
cout<<"6. Exit"<<endl;
// выбор пункта меню
switch((int)getch())
{
case 49: {input();break;}
case 50: {output();break;}
case 51: {stack();break;}
case 52: {outstack();break;}
case 53: {number();break;}
case 54: {exit(0);break;}
// case 56: {;break;}
}
}
}
//==ввод данных у файл==
void input()
{
system("cls");
cout<<"Input words to file: "<<endl;
if(In!=NULL)
{
remove("In.txt");
}
else
{
if((In=fopen("In.txt","w")))
{
cout<<"Enter words (in column)"<<endl;
do{
fflush(stdin);
cin>>word; // ввод слова
fputs(word,In); // запись слова у файл
fputs("\n",In);
cout<<"Would you like to continue?[y/n]"<<endl;
}while(getch()!='n');
}
else {cout<<"Cannot open file!!!"<<endl;getch();}
}
fclose(In); // закрытие файла
}
//==вывод данных из файла==
void output()
{
system("cls");
if((In=fopen("In.txt","r")))
{
cout<<"Entered words: "<<endl<<endl;
while(!feof(In))
{
fgets(word,10,In);
if(feof(In)) break;
printf(" %s",word);
}
}
else {cout<<"Cannot open file!!!"<<endl;}
fclose(In);
getch();
}
//==создание стека==
void push(char *value)
{
current=new(Stack);
strcpy(current->data,value); // внесение елемента в стек
current->next=head;
head=current; //установить новую вершину стека
}
//==создание стека==
void stack()
{
system("cls");
puts("Building stack from file");
if((In=fopen("In.txt","r")))
{
while(!feof(In))
{
fgets(word,15,In); // чтение файла
if(feof(In)) break;
push(word);
}
}
else {cout<<"Cannot open file!!!"<<endl;}
fclose(In);
cout<<"Done!"<<endl;
getch();
}
//==вывод стека==
void outstack()
{
system("cls");
cout<<"The components of build stack"<<endl<<endl;
// виведення стеку
if((Out=fopen("Out.txt","w")))
{
while(head!=NULL)
{
cout<<head->data<<endl;
fputs(head->data,Out);
head=head->next;
}
}
else {cout<<"Cannot open file!!!"<<endl;}
fclose(Out);
getch();
}
//==количество==
void number()
{
system("cls");
int count=0; // счетчик вхождения елемента
cout<<"Number of equal words in stack"<<endl;
while(head!=NULL)
{
head->data;
while(head!=NULL)
{
if(strcmp(head->data,head->next->data))
{
count++;
}
head=head->next;
}
cout<<head->data<<" == "<<count<<endl; // вывод елеметна и количества его вхождений в стек
head=head->next;
}
getch();
}
Помогите пожалуйста. Скажите что не так.