Форум программистов, компьютерный форум CyberForum.ru

Добавление строки в стек - C++

Восстановить пароль Регистрация
 
SuLLeN
 Аватар для SuLLeN
21 / 21 / 4
Регистрация: 27.12.2011
Сообщений: 767
13.11.2012, 21:11     Добавление строки в стек #1
Добрый вечер!

Уже раза 3-4 писал, так и никто не помог....
Программку чутку доделал, осталось только организовать добавление элементов структуры в стек.
Помогите пожалуйста.

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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <string>
 
using namespace std;
 
template<typename T>
class MyStack
{
  public:
    MyStack();
    void push(T);
    void pop();
    T top();
    T operator[](int);
    int mySize() const;
  private:
    int size; 
    T* stack;                    
};
 
template<typename T>
MyStack<T>::MyStack()
  :size(0)
{       
}                                           
 
template<typename T>
void MyStack<T>::push( T elem )
{ 
  if(size == 0)
  {     
    stack = new T[size];
    stack[size++] = elem;
  }
  else
  { 
   T tempMass[size];  
   
   for( int i = 0; i < size; ++i)
   {
     tempMass[i] = stack[i];  
   }     
     
   delete [] stack;
   stack = new T[++size];
   
   for( int i = 0; i < size; ++i)
   {
     stack[i] = tempMass[i];  
   } 
   
   stack[size-1] = elem;
  }                      
}
 
template<typename T>
void MyStack<T>::pop()
{
  if( size > 0 )
  { 
    --size;    
    T tempMass[size];  
    for( int i = 0; i < size; ++i )
    {
      tempMass[i] = stack[i];
    }
    delete [] stack;
    stack = new T[size];
    
    for( int i = 0; i < size; ++i )
      stack[i] = tempMass[i];
  }
  else 
  cout << "Stek pust." << endl;       
}   
 
template<typename T>
T MyStack<T>::top()
{
  if( size > 0 )                 
  return stack[size-1];    
  else if( size == 0 )
  cout << "Stek pust." << endl;
}   
 
template<typename T>
T MyStack<T>::operator[](int pos)
{   
  if( pos <= size - 1 )                          
  return stack[pos]; 
  else 
  cout << "Vihod za granici steka/" << endl;                          
}                               
 
template<typename T>
int MyStack<T>::mySize() const
{
  return size;  
}
 
struct sport
{
 string fio;
 string vid;
 string fak;
 string spc;
 int lvl;
};
 
void word(sport * obj, int n)
{
     for (int i=0; i < n; i++)
     {
        std::cout << std::endl;
        std::cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г”.Г€.ГЋ.: ";
        getline(std::cin, obj[i].fio);
        std::cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г® ñïîðòå: ";
        getline(std::cin, obj[i].vid);
        std::cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г® ГґГ*êóëüòåòå: ";
        getline(std::cin, obj[i].fak);
        std::cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г® ñïåöèГ*ëüГ*îñòè: ";
        getline(std::cin, obj[i].spc);
        std::cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г® âîçðГ*Г±ГІГҐ: ";
        std::cin >> obj[i].lvl;
        std::cout << std::endl;
     } 
}
  
int main ()
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    int n = 1;
    sport* mas_struct=new sport[n]; // ГЊГ*Г±Г±ГЁГў äëÿ õðГ*Г*ГҐГ*ГЁГї Г¤Г*Г*Г*ûõ
    word(mas_struct,n); // ÔóГ*êöèÿ ââîäГ* Г¤Г*Г*Г*ûõ Г® ñòóäåГ*ГІГ*Гµ
 
    
 
    system("pause");
    return 0;   
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 21:11     Добавление строки в стек
Посмотрите здесь:

Стек + Строки C++
C++ Строки и стек
C++ Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами
Организовать заданную структуру данных: точка (x, y) плоскости, стек (добавление, удаление и чтение элемента) C++
Используя стек напечатать содержимое текстового файла, выписывая символы каждой его строки в обратном порядке. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.11.2012, 21:41     Добавление строки в стек #2
C++
1
T operator[](int);
Стек, он на то и стек, что к произвольному элементу в нём не обратишься. Эта перегрузка оператора здесь не нужна, скорее всего.
SuLLeN
 Аватар для SuLLeN
21 / 21 / 4
Регистрация: 27.12.2011
Сообщений: 767
14.11.2012, 01:46  [ТС]     Добавление строки в стек #3
Ну допустим, и попрощаемся с шаблончиком:
C++
1
2
3
4
5
6
7
8
template<typename T>
T MyStack<T>::operator[](int pos)
{   
  if( pos <= size - 1 )                          
  return stack[pos]; 
  else 
  cout << "Vihod za granici steka/" << endl;                          
}
А как все таки со строками работать?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
14.11.2012, 09:56     Добавление строки в стек #4
Цитата Сообщение от SuLLeN Посмотреть сообщение
А как все таки со строками работать?
Ну а что не получается-то? Пробовал написать такое?
C++
1
2
MyStack<string> stringStack;
stringStack.push("Push Me Baby");
Работает?
SuLLeN
 Аватар для SuLLeN
21 / 21 / 4
Регистрация: 27.12.2011
Сообщений: 767
14.11.2012, 16:12  [ТС]     Добавление строки в стек #5
А если по элементно из структуры
C++
1
2
3
4
5
6
7
8
struct sport
{
 string fio;
 string vid;
 string fak;
 string spc;
 int lvl;
};
вбивать в стек, то как будет выглядеть это?

Добавлено через 11 минут
Сначала нужно записать элементы в массив, к примеру mas_struct, а потом этот массив в стек запилить...
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
14.11.2012, 16:18     Добавление строки в стек #6
Лично я нихрена не понял что надо в стек запихать, строку, элемент структуры, структуру или массив структур...
Видимо поэтому
Цитата Сообщение от SuLLeN Посмотреть сообщение
Уже раза 3-4 писал, так и никто не помог....
SuLLeN
 Аватар для SuLLeN
21 / 21 / 4
Регистрация: 27.12.2011
Сообщений: 767
14.11.2012, 17:05  [ТС]     Добавление строки в стек #7
Создать стек записи Спортсмен на основе статического массива типа запись.
Реализовать методы : Добавить элемент, удалить элемент, вершина стека.

Может я объясняю не так.... в общем вот задание.

Добавлено через 2 минуты
В записи должны быть элементы: string fio (ФИО), string vid (Вид спорта), string fak (Факультет), string spc (Специальность), int lvl (Возраст).
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
14.11.2012, 17:19     Добавление строки в стек #8
А шаблон тебе зачем?
В общем класс стек должен работать со структурой (sport в твоем случае).
Я бы реализовал стек на основе указателей на структуру.
C++
1
2
3
4
5
6
sport *p_sport = new sport; // выделил
... // заполнил
my_stack.push( p_sport ); // затолкнул
...
my_stack.pop( &p_sport ); // вытолкнул
delete p_sport; // удалил
SuLLeN
 Аватар для SuLLeN
21 / 21 / 4
Регистрация: 27.12.2011
Сообщений: 767
14.11.2012, 17:56  [ТС]     Добавление строки в стек #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main ()
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    int i,n = 1;
    sport *p_sport = new sport[n];
    word(p_sport,n);
    
    MyStack.push(p_sport); // Тут ошибка
    
    MyStack.pop(&p_sport); // И тут
    
    delete p_sport;
 
    system("pause");
    return 0;   
}
C++
1
2
3
 C:\Users\SulleN\Desktop\stek.cpp In function `int main()': 
128 C:\Users\SulleN\Desktop\stek.cpp missing template arguments before '.' token 
130 C:\Users\SulleN\Desktop\stek.cpp missing template arguments before '.' token
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
14.11.2012, 18:11     Добавление строки в стек #10
А MyStack у тебя где определен?
Метод pop принимает аргументы?
SuLLeN
 Аватар для SuLLeN
21 / 21 / 4
Регистрация: 27.12.2011
Сообщений: 767
14.11.2012, 18:15  [ТС]     Добавление строки в стек #11
Вот весь код

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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <iostream>
#include <string>
 
using namespace std;
 
template<typename T>
class MyStack
{
  public:
    MyStack();
    void push(T);
    void pop();
    T top();
    int mySize() const;
  private:
    int size; 
    T* stack;                    
};
 
template<typename T>
MyStack<T>::MyStack()
  :size(0)
{       
}                                           
 
template<typename T>
void MyStack<T>::push( T elem )
{ 
  if(size == 0)
  {     
    stack = new T[size];
    stack[size++] = elem;
  }
  else
  { 
   T tempMass[size];  
   
   for( int i = 0; i < size; ++i)
   {
     tempMass[i] = stack[i];  
   }     
     
   delete [] stack;
   stack = new T[++size];
   
   for( int i = 0; i < size; ++i)
   {
     stack[i] = tempMass[i];  
   } 
   
   stack[size-1] = elem;
  }                      
}
 
template<typename T>
void MyStack<T>::pop()
{
  if( size > 0 )
  { 
    --size;    
    T tempMass[size];  
    for( int i = 0; i < size; ++i )
    {
      tempMass[i] = stack[i];
    }
    delete [] stack;
    stack = new T[size];
    
    for( int i = 0; i < size; ++i )
      stack[i] = tempMass[i];
  }
  else 
  cout << "Stek pust." << endl;       
}   
 
template<typename T>
T MyStack<T>::top()
{
  if( size > 0 )                 
  return stack[size-1];    
  else if( size == 0 )
  cout << "Stek pust." << endl;
}                               
 
template<typename T>
int MyStack<T>::mySize() const
{
  return size;  
}
 
struct sport
{
 string fio;
 string vid;
 string fak;
 string spc;
 int lvl;
};
 
void word(sport * obj, int n)
{
     for (int i=0; i < n; i++)
     {
        std::cout << std::endl;
        std::cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г”.Г€.ГЋ.: ";
        getline(std::cin, obj[i].fio);
        std::cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г® ñïîðòå: ";
        getline(std::cin, obj[i].vid);
        std::cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г® ГґГ*êóëüòåòå: ";
        getline(std::cin, obj[i].fak);
        std::cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г® ñïåöèГ*ëüГ*îñòè: ";
        getline(std::cin, obj[i].spc);
        std::cout << "Ââåäèòå Г¤Г*Г*Г*ûå Г® âîçðГ*Г±ГІГҐ: ";
        std::cin >> obj[i].lvl;
        std::cout << std::endl;
     } 
}
  
int main ()
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    int i,n = 1;
    sport *p_sport = new sport[n];
    word(p_sport,n);
    
    MyStack.push(p_sport);
    
    MyStack.pop(&p_sport);
    
    delete p_sport;
 
    system("pause");
    return 0;   
}
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
14.11.2012, 18:24     Добавление строки в стек #12
Ну а дальше то что?
Класс стека не определен, метод pop параметров не принимает. Что будешь предпринимать?
SuLLeN
 Аватар для SuLLeN
21 / 21 / 4
Регистрация: 27.12.2011
Сообщений: 767
14.11.2012, 18:28  [ТС]     Добавление строки в стек #13
Знал бы, не просил бы помощи... логично ведь?
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
14.11.2012, 18:36     Добавление строки в стек #14
Нее дружок, с такими знаниями ты сам ничего не сделаешь, а думать за тебя я не хочу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2012, 19:57     Добавление строки в стек
Еще ссылки по теме:

C++ Реализовать класс стек, хранящий в себе строки
Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? C++
C++ Из строки извлечь символы операций в стек, а цифры - в другую строку

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SuLLeN
 Аватар для SuLLeN
21 / 21 / 4
Регистрация: 27.12.2011
Сообщений: 767
14.11.2012, 19:57  [ТС]     Добавление строки в стек #15
Может кто другой поможет тогда? В беде человека оставлять тоже не вариант...

Добавлено через 11 минут
Ну как обычно, пол пути прошел и встал на месте...

Добавлено через 40 минут
Люди, помогите кто нибудь, пожалуйста, неделю уже пишу!
Yandex
Объявления
14.11.2012, 19:57     Добавление строки в стек
Ответ Создать тему
Опции темы

Текущее время: 07:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru