Title: ¿Cómo agregar una cadena string a una pila estática?
Tags: c++;pilas
Question: Código fuente de una pila estática funcionando pero quiero agregar un string para poner 3 colores
#include<iostream&gt;
using namespace std;
#define CAP_PILA 20 /// deseo tener una cadena string para almacenar nombres de colores
struct Pila{
char arr[CAP_PILA]; //estructura de dato char
int p;
Pila pilaCreate(){ ///declaración de funciones
Pila pila;
pila.p=-1;
return pila;
void pilaPush(Pila&amp; pila, char c){
pila.p++;
pila.arr[pila.p]=c;
char pilaPop(Pila&amp; pila){
char aux =pila.arr[pila.p];
pila.p--;
return aux;
bool pilaesvacia(Pila pila){
return pila.p<0;
int main (){ //estatico
Pila p = pilaCreate();
pilaPush(p,'a'); ////caracteres que quiero que sean nombres de colores
pilaPush(p,'B');
pilaPush(p,'C');
while(!pilaesvacia(p)){
cout<<pilaPop(p)<<endl;
}
return 0;
Comment: Y el problema que tienes es?

Comment: solo me deja poner un solo caracter o letra pero  no una palabra

Comment: Pues claro, si es un array de caracteres. Usa un array de strings (`st75b5:f2c1:f5d7:b954:8dc3:cee9:baf:a8c0array`) si quieres guardar strings.

Comment: tendría que cambiar gran parte del código verdad

Comment: Cómo gran parte del código no. En todos tus métodos recibes un `char`, cámbialo a un `char*` aunque sería mejor un `const char*` de modo que recibas una cadena de caracteres. Lo que si te frías que cambiar es la asignación del String a: `strcpy(pila.arr[p], c);`

Comment: No tanto, en tu editor usa el "buscar y reeplazar" y cambia `char` por `st75b5:f2c1:f5d7:b954:8dc3:cee9:baf:a8c0string`. Y no olvides incluir ``.

Comment: @JuanCarlosGuibovich intento hacer los cambios pero marca errores no doy una


Here is another answer: A tu estructura de pila, el campo arr tiene que se un arreglo de caracteres para guardar los punteros a los strings que pasas. Realmente no necesitas un struct ya que tu pila realmente es un arreglo que lo controlas por indice, pero bueno, si todo es estático y para ese efecto en el tu metodo pilaPush tienes que recibir el puntero a la constante de caracteres que deseas guardar. Ten  en cuenta que todo es estático practicamente.
using namespace std;
#define CAP_PILA 20 /// deseo tener una cadena string para almacenar nombres de colores
struct Pila {
char *arr[CAP_PILA]; //estructura de dato char que guarda el puntero a la palabra
int p;
Pila pilaCreate() { ///declaración de funciones
Pila pila;
pila.p = -1;
return pila;
void pilaPush(Pila&amp; pila, const char *c) {
pila.p++;
pila.arr[pila.p] = (char*)c;
char *pilaPop(Pila&amp; pila) {
char *aux = pila.arr[pila.p];
pila.p--;
return aux;
bool pilaesvacia(Pila pila) {
return pila.p < 0;
int main() { //estatico
Pila p = pilaCreate();
pilaPush(p, &quot;azul&quot;); ////caracteres que quiero que sean nombres de colores
pilaPush(p, &quot;Blanco&quot;);
pilaPush(p, &quot;Celeste&quot;);
while (!pilaesvacia(p)) {
cout << pilaPop(p) << endl;
return 0;
No obstante lo anterior, aquí te dejo el manejo de una pila dinámica que es lo que realmente se conoce como una estructura ultimo en entrar, primero en salir LIFO (Last-In, Firt-Out).
#include<iostream&gt;
using namespace std;
#define CAP_PILA 20 /// deseo tener una cadena string para almacenar nombres de colores
struct Pila {
char arr[CAP_PILA]; //estructura de dato char
struct Pila *p;
struct Pila * pilaCreate() { ///declaración de funciones
struct Pila *pila = new Pila();
pila-&gt;arr[0] = 0;
pila-&gt;p = NULL;
return pila;
void pilaPush(struct Pila ** pila, const char * c) {
struct Pila* nuevaPila = pilaCreate();
strcpy(nuevaPila-&gt;arr, c);
nuevaPila-&gt;p = *pila;
*pila = nuevaPila;
char* pilaPop(struct Pila** pila) {
struct Pila* tmpPila = *pila;
char * tmpArr = new char[CAP_PILA];
strcpy(tmpArr, (*pila)-&gt;arr);
*pila = tmpPila-&gt;p;
delete tmpPila;
return tmpArr;
bool pilaesvacia(struct Pila* pila) {
return pila-&gt;p == NULL;
int main() { //estatico
struct Pila *p = NULL;
pilaPush(&amp;p, &quot;Hola&quot;); ////caracteres que quiero que sean nombres de colores
pilaPush(&amp;p, &quot;Estoy en&quot;);
pilaPush(&amp;p, &quot;Stackoverflow&quot;);
while (!pilaesvacia(p)) {
cout << pilaPop(&amp;p) << endl;
};
cout << p-&gt;arr << endl;
return 0;
Por otro lado, si estás en C++ ya este tipo de listas enlazadas las tienes en la librería estándar: stack que tiene todas las funcionalidades sin tener que hacer tu propia clase de pila.
La vesión con stack:
#include<iostream&gt;
#include <stack&gt;
using namespace std;
int main() {
stack<string&gt; pila;
pila.push(&quot;Azul&quot;);
pila.push(&quot;Blanco&quot;);
pila.push(&quot;Celeste&quot;);
while (!pila.empty()) {
cout << pila.top() << endl;
pila.pop();
return 0;
Comment for this answer: muchas gracias por el aporte en mi escuela me enseñan a ciegas y lo que aprendo es mas por tutoriales que por las clases
Comment for this answer: Si es lo que querías no te lo olvides de aceptar la respuesta

Here is another answer: Aqui te dejo otra version con stack, para realizar una pila estática en C++, añadiendo strings:
#include <iostream&gt;
#include <conio.h&gt;
#include <stack&gt;
using namespace std;
stack <string&gt; tpilacolores;
int main ()
tpilacolores.push (&quot;morado&quot;);
tpilacolores.push (&quot;rojo&quot;);
tpilacolores.push (&quot;azul&quot;);
tpilacolores.push (&quot;verde&quot;);
tpilacolores.push (&quot;amarillo&quot;);
tpilacolores.push (&quot;rosa&quot;);
tpilacolores.push (&quot;blanco&quot;);
tpilacolores.push (&quot;naranja&quot;);
tpilacolores.push (&quot;negro&quot;);
tpilacolores.push (&quot;cafe&quot;);
while (tpilacolores.size ()&gt;0) {
cout << tpilacolores.top () << endl;
tpilacolores.pop ();
getch ();
return 0;
Comment for this answer: Si bien el código podría resolver el problema de OP, es mucho mejor explicar la lógica del mismo ya que varios de los usuarios que van iniciando probablemente no comprendan lo que hace tu código. ;)

{'source': 'StackExchangeDataset', 'subset': 'es.stackoverflow.com', 'metadata': {'AnswerCount': 2, 'CommentCount': 7, 'ContentLicense': 'CC BY-SA 4.0', 'CreationDate': '2021:00:07/25/21', 'FavoriteCount': None, 'PostTypeId': 1, 'Tags': '<c++><pilas>', 'Title': '¿Cómo agregar una cadena string a una pila estática?', 'ViewCount': 472, 'id': 470962, 'user_AboutMe': None, 'user_AccountId': 21393198.0, 'user_DisplayName': 'Kin GO', 'user_Reputation': 1.0, 'user_Views': 2.0, 'user_id': 224884.0}}