HeeZ
Гость
|
|
« : 03-10-2005 19:36 » |
|
Здраствуйте, помогите с решением этой тривиальной задачи Сформировать строковый стек таким образом, чтобы первые три злемента были отсортированы по алфавиту. в общем делаю с помощью сторокового массива, помещаю его в стек, а дальше проблема, как отсортировать элементы по возростанию?; у меня получилось только сортировка в обратном порядке.
#include<iostream.h> #include<windows.h> #include<time.h> #include <stdlib.h> #include<math.h> char *s1,*s2; int StackCount=-1, StackCount1=-1; void push (char i, char *s, int& StackCount) { s[++StackCount]=i; } void pop (char &i, char *s, int& StackCount) { i=s[StackCount--]; } bool empty(int StackCount) {return (StackCount==-1); } int main() { int n; cin>>n; char x,y,z; char *s1=new char[n]; for (int i=0;i<n;i++) {cin>>x; push(x,s1,StackCount); }
cout<<endl<<endl; char *s2= new char[n]; for ( i=0;i<(n/2);i++) { pop(x,s1,StackCount); pop(y,s1,StackCount); pop(z,s1,StackCount);
Дальше не могу разобраться как отсортировать
Заранее благодарен.
|
|
|
Записан
|
|
|
|
Diletant
Помогающий
Offline
|
|
« Ответ #1 : 05-10-2005 12:44 » |
|
Посмотрел код и не понял, что подразумевается под термином "строковый стек" и особенно его "первые три элемента" . Если "единицей хранения" стека является строка, то должны существовать функции popstr и pushstr, а не только заталкивание и вытряхивание символа. И тогда проблема решается "автоматически" с помощью функции strcmp. Если речь идет о стеке символов, то в чем вообще проблема?
|
|
|
Записан
|
|
|
|
HeeZ
Гость
|
|
« Ответ #2 : 05-10-2005 18:09 » |
|
Посмотрел код и не понял, что подразумевается под термином "строковый стек" и особенно его "первые три элемента" . Если "единицей хранения" стека является строка, то должны существовать функции popstr и pushstr, а не только заталкивание и вытряхивание символа. И тогда проблема решается "автоматически" с помощью функции strcmp. Если речь идет о стеке символов, то в чем вообще проблема?
Функция strcmp() поддерживается системой UNIX и выполняет беззнаковое сравнение строк, связанных с указателями s1 и s2. Сравнение выполняется без учета регистров набора букв латинского алфавита. Функция выполняет сравнение посимвольно, начиная с начальных символов строк и до тех пор, пока не встретятся несовпадающие символы либо не закончится одна из строк.
Надо сделать 2 варианта, не могу понять просто как это сделать через стек, не могу найти описания функций pushstr,popstr. А если стек символов, можно ли сделать сортировку через if,
|
|
|
Записан
|
|
|
|
HeeZ
Гость
|
|
« Ответ #3 : 05-10-2005 18:21 » |
|
Как реализовать сортировку через стек, и почему он сортирует в обратном порядке?
#include <iostream.h> #include <stdlib.h> #include <string.h>
int sravni(const void *a, const void *b) { unsigned long *pa = (unsigned long *)a, *pb = (unsigned long *)b; return strcmp((char *)*pa, (char *)*pb); } void main() { char *pc[] = { "a", "P", "D", "A", "I", "F", "M" };
int n = sizeof(pc)/sizeof(pc[0]); cout << "\n Do:" << hex; for (int i = 0; i < n; i++) cout << "\npc[" << i << "]=" << (unsigned long)pc << " -> " << pc;
qsort( (void *)pc, n, sizeof(pc[0]), sravni ); cout << "\n\n Posle:"; for (i = 0; i < n; i++) cout << "\npc[" << i << "]=" << (unsigned long)pc << " -> " << pc; }
|
|
|
Записан
|
|
|
|
Diletant
Помогающий
Offline
|
|
« Ответ #4 : 06-10-2005 13:50 » |
|
Я тоже ничего не могу понять, что тебе надо. Поэтому ответь пожалуйста на простой вопрос. Что такое в твоем понятии стек? И на второй вопрос: Что такое стек в данной задаче? И на третий вопрос: Что ты собрался сортировать: строки или символы в строке? PS А функции popstr и pushstr ты должен был реализовать сам на основе твоих pop и push.
|
|
|
Записан
|
|
|
|
HeeZ
Гость
|
|
« Ответ #5 : 08-10-2005 17:58 » |
|
Я сначала тоже не понимал, препод скакзал что надо просто сформировать строковый стек, можно и символьный. Т.е. поместить массив в стек, отсортировать и во второй поместить. Почему strcmp сортирует в обратном порядке? Cтрочные же больши прописных.
|
|
|
Записан
|
|
|
|
HeeZ
Гость
|
|
« Ответ #6 : 08-10-2005 17:59 » |
|
Спасибо за наводку на функцию strcmp, туплю с реализацией с помощью стека:(
|
|
|
Записан
|
|
|
|
|