Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 807
#1

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

13.11.2012, 21:11. Просмотров 1298. Ответов 14
Метки нет (Все метки)

Добрый вечер!

Уже раза 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;   
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 21:11
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Добавление строки в стек (C++):

Добавление элемента в стек - C++
Здравствуйте, после цикла for, в котором добавляю элементы в стек, голова стека begin остается = NULL, в чем проблема? #include...

Организовать заданную структуру данных: точка (x, y) плоскости, стек (добавление, удаление и чтение элемента) - C++
Организовать заданную структуру данных: точка (x, y) плоскости, стек. Определить структуру элемента и написать подпрограммы добавления,...

Стек + Строки - C++
Всем доброго дня) Вопрос таков подскажите плиз как в стек засунуть слово? то есть массив char, задание состоит в том чтобы определить...

Строки и стек - C++
Задача такова: пользователь с клавиатуры вводит строку, после введения запускается обработчик, который удаляет из этой строки символ &quot;t&quot;....

Реализовать класс стек, хранящий в себе строки - C++
Необходимо реализовать класс стек, хранящий в себе строки. Чужие реализации не интересуют. Шаблоны использовать нельзя. Вот, что написал....

Из строки извлечь символы операций в стек, а цифры - в другую строку - C++
Из исходной строки необходимо извлечь символы операций и поместить в стек а цифры в другую строку... но вот ошибка... Вот код:const int max...

14
John Prick
831 / 764 / 154
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
13.11.2012, 21:41 #2
C++
1
T operator[](int);
Стек, он на то и стек, что к произвольному элементу в нём не обратишься. Эта перегрузка оператора здесь не нужна, скорее всего.
1
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 807
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;                          
}
А как все таки со строками работать?
0
John Prick
831 / 764 / 154
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
14.11.2012, 09:56 #4
Цитата Сообщение от SuLLeN Посмотреть сообщение
А как все таки со строками работать?
Ну а что не получается-то? Пробовал написать такое?
C++
1
2
MyStack<string> stringStack;
stringStack.push("Push Me Baby");
Работает?
1
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 807
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, а потом этот массив в стек запилить...
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
14.11.2012, 16:18 #6
Лично я нихрена не понял что надо в стек запихать, строку, элемент структуры, структуру или массив структур...
Видимо поэтому
Цитата Сообщение от SuLLeN Посмотреть сообщение
Уже раза 3-4 писал, так и никто не помог....
0
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 807
14.11.2012, 17:05  [ТС] #7
Создать стек записи Спортсмен на основе статического массива типа запись.
Реализовать методы : Добавить элемент, удалить элемент, вершина стека.

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

Добавлено через 2 минуты
В записи должны быть элементы: string fio (ФИО), string vid (Вид спорта), string fak (Факультет), string spc (Специальность), int lvl (Возраст).
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 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; // удалил
1
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 807
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
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
14.11.2012, 18:11 #10
А MyStack у тебя где определен?
Метод pop принимает аргументы?
0
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 807
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;   
}
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
14.11.2012, 18:24 #12
Ну а дальше то что?
Класс стека не определен, метод pop параметров не принимает. Что будешь предпринимать?
1
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 807
14.11.2012, 18:28  [ТС] #13
Знал бы, не просил бы помощи... логично ведь?
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
14.11.2012, 18:36 #14
Нее дружок, с такими знаниями ты сам ничего не сделаешь, а думать за тебя я не хочу.
0
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 807
14.11.2012, 19:57  [ТС] #15
Может кто другой поможет тогда? В беде человека оставлять тоже не вариант...

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

Добавлено через 40 минут
Люди, помогите кто нибудь, пожалуйста, неделю уже пишу!
0
14.11.2012, 19:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2012, 19:57
Привет! Вот еще темы с ответами:

Используя стек, описать функцию проверяющую, является ли стек пустым - C++
Используя стек, описать функцию проверяющую, является ли стек пустым

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами - C++
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

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

Используя стек напечатать содержимое текстового файла, выписывая символы каждой его строки в обратном порядке. - C++
Помогите, пожалуйста, с решением задачи в С++. Используя стек напечатать содержимое текстового файла, выписывая символы каждой его...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru