Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа со стеком в C++
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Triplet
Подскажите, пожалуйста, алгоритм, по которому можно вывести буквы из стека в алфавитном порядке.
// 2_1.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <cstring>
#include <stdlib.h>
using namespace std;

class Stack
{private:
static const int MAX = 80;
int st[MAX];
int top;
public:
Stack( )
{top=0;}
void push (int var)
{st[++top]=var;}
int pop( )
{return st[top--];}
};
int _tmain(int argc, _TCHAR* argv[])
{Stack s1;
const int MAX=80;
char buffer[3][MAX];
int i=0;
int x,j,dlina,k;char z;
ifstream infile("input.txt");
while (!infile.eof())
{infile.getline(buffer[i],MAX);
cout << buffer[i] << endl; i++; //считали данные в массив строк
};
k=0;dlina=0;
for (i=0;i<3;i++)
{x=strlen(buffer[i]);dlina=dlina+x;
for (j=0;j<=x;j++) //данные из массива помещаем в стек
{s1.push(buffer[i][j]);k++;};
};
for (z='A';z<='Z';z++)
{for (i=0;i<=k;i++) //здесь должен быть вывод в алфавитном порядке
{if ((s1.pop()==z)||(s1.pop()==(z+32))){cout << s1.pop() << endl << "\n";};
};
};
return 0;
}
volvo
Цитата
// здесь должен быть вывод в алфавитном порядке
Можно уточнить, нужен вывод в алфавитном порядке символов строки, содержащейся в очередном элементе стека, или собственно надо отсортировать сам стек (строки должны быть упорядочены)?
Triplet
надо упорядочить все символы, а не строки
volvo
Без велосипедов - вот так:

#include <fstream>
#include <string>
#include <iostream>

#include <stack>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
stack<string> s;
string buffer;

ifstream infile("input.txt");
while (!infile.eof()) {
getline(infile, buffer, '\n');
s.push(buffer);
cout << buffer << endl;
}

cout << "after:" << endl;
while(!s.empty()) {
buffer = s.top();
sort(buffer.begin(), buffer.end());
cout << buffer << endl;
s.pop();
}
return 0;
}

Triplet
спасибо большое give_rose.gif
а если так радикально не менять мой код, то можно что-нибудь сделать?
volvo
А если так радикально не менять... Значит, опять придумывать по второму разу то, что уже есть готовое. Это без меня smile.gif В данном случае - попытаться написать свой (неполноценный, потому что повторить std::stack все равно не удастся) класс Stack, который будет работать только с целыми, причем программа будет рассчитана только на определенный размер файла (3 строки, насколько я вижу), да и работать посимвольно сложнее, чем с уже готовыми классами (кстати, STL - это стандартная библиотека, входит в состав С++, так что если ты все еще сомневаешься на этот счет, то это должно компилироваться и работать на любом современном компиляторе)
Triplet
Понятно, ещё раз большое спасибо smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.