Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите разобраться с строковым стеком  (Прочитано 9625 раз)
0 Пользователей и 1 Гость смотрят эту тему.
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
Помогающий

de
Offline 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
Помогающий

de
Offline Offline

« Ответ #4 : 06-10-2005 13:50 » new

Я тоже ничего не могу понять, что тебе надо. Поэтому ответь пожалуйста на простой вопрос. Что такое в твоем понятии стек? И на второй вопрос: Что такое стек в данной задаче? И на третий вопрос: Что ты собрался сортировать: строки или символы в строке?
PS  А функции popstr и pushstr ты должен был реализовать сам на основе твоих pop и push.
Записан
HeeZ
Гость
« Ответ #5 : 08-10-2005 17:58 » 

Я сначала тоже не понимал, препод скакзал что надо просто сформировать строковый стек, можно и символьный.
Т.е. поместить массив в стек, отсортировать и во второй поместить.
Почему strcmp сортирует в обратном порядке? Cтрочные же больши прописных.
Записан
HeeZ
Гость
« Ответ #6 : 08-10-2005 17:59 » 

Спасибо за наводку на функцию strcmp, туплю с реализацией с помощью стека:(
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines