elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  piladinamica caracteres
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: piladinamica caracteres  (Leído 1,424 veces)
dany haster

Desconectado Desconectado

Mensajes: 1


Ver Perfil
piladinamica caracteres
« en: 19 Noviembre 2013, 04:54 am »

hola necesito que alguien me diga en donde estoy mal en este programa lo corre pero no em lee las cadenas de ante mano gracias =)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <string>
#include<conio.h>
#define n 20
using namespace std;

typedef struct nodo
{
    string dat[n];
    struct nodo *p;
}nod;
nod *tope=NULL;

void push(string ndat)
{
     nod *nvo;
     nvo=new nod;
     nvo->dat[n]=ndat;
     if(tope==NULL)
     nvo->p=NULL;
     else
     {
         nvo->p=tope;
     }
     tope=nvo;
}
void pop()
{
     nod *aux=tope;
     if(tope==NULL)
     {
                   cout<<"\n La pila esta vacia\n";
                   system("pause");
                   return;
     }
     tope=aux->p;
     cout<<"\n Sale: "<<aux->dat<<endl;
     system("pause");
     delete(aux);
}

void imprimepila()
{
     nod *aux=tope;
     if(tope==NULL)
     {
                   cout<<"\n La pila esta vacia\n";
                   system("pause");
                   return;
     }
     while(aux!=NULL)
     {
                 cout<<aux->dat<<endl;
                 aux=aux->p;
     }
     cout<<endl;
     system("pause");
}

void busca(string bus)
{
     nod *aux=tope;
     int contador=0;
     if(tope==NULL)
     {
                   cout<<"\n La pila esta vacia\n";
                   system("pause");
                   return;
     }
     while(aux!= NULL)
     {
                 
                 if(aux->dat[n]==bus)
                 {
                      cout<<"\nDato encontrado en la posicion: "<<contador<<endl;
                      system("pause");
                      return;
                 }
                 aux=aux->p;  contador++;
     }
     cout<<"\nEl "<<bus<<" no esta en la pila.\n";
}

void ultima()
{
     nod *aux=tope;
     if(tope==NULL)
     {
                   cout<<"\n La pila esta vacia\n";
                   system("pause");
                   return;
     }
      while(aux->p!= NULL)
      {
                  aux=aux->p;
      }
      cout<<"\nEl dato que esta en el fondo de la pila es: "<<aux->dat<<endl;;
      system("pause");
}

void primero()
{
     if(tope==NULL)
     {
                   cout<<"\n La pila esta vacia\n";
                   system("pause");
                   return;
     }
     cout<<tope->dat<<endl;
}

void numelemento(string bus)
{
     nod *aux=tope;
     int contador=0;
     if(tope==NULL)
     {
                   cout<<"\n La pila esta vacia\n";
                   system("pause");
                   return;
     }
     while(aux!= NULL)
     {
          contador++;
          aux=aux->p;
     }
     cout<<"\nLa pila tiene: "<<contador<<" elementos";
}

void elimina()
{
     nod *aux=tope;
     int contador=0;
     if(tope==NULL)
     {
                   cout<<"\n La pila esta vacia\n";
                   system("pause");
                   return;
     }
     while(aux!= NULL)
     {
          aux=aux->p;
          pop();
     }
     cout<<"\n La pila esta vacia\n";
}

main()
{
      int opc;
      string dato[n], buscado[n];
      string dat[n];
      cout<<"\nEscoja una opcion: \n";
      do{
          cout<<"\n 1.Insertar en la pila";
          cout<<"\n 2.Sacar de la pila";
          cout<<"\n 3.Imprimir pila";
          cout<<"\n 4.Buscar en la pila";
          cout<<"\n 5.Elemento ubicado en el fondo de la pila";
          cout<<"\n 6.Elemento ubicado al principio de la pila";
          cout<<"\n 7.Numero del elemento en la pila";
          cout<<"\n 8.Eliminar toda la pila";
          cout<<"\n 9.salir\n\n";
          cin>>opc;
         
          switch(opc)
          {
                 case 1:
                      cout<<"\nDato a insertar: ";
                      fflush(stdin);
                      getline(cin,dato[n]);
                      push(dato[n]);
                      system("pause");
                      break;
                 case 2:
                      pop();
                      break;
                 case 3:
                      imprimepila();
                      break;
                 case 4:
                      cout<<"\nDar dato a insertar: ";
                      fflush(stdin);
                      getline(cin,buscado[n]);
                      busca(buscado[n]);
                      break;
                 case 5:
                      ultima();
                      break;
                 case 6:
                      primero();
                      break;
                 case 7:
                      cout<<"\nQue elemento deseas buscar: ";
                      fflush(stdin);
                      getline(cin,dat[n]);
                      numelemento(dat[n]);
                      break;
                 case 8:
                      elimina();
                      break;
                 case 9:
                      cout<<"\nFin del programa. ";
                      system("pause");
                      break;
                 default:
                         cout<<"\nOpcion incorrecta vuelve a intentarlo ";
          }
      }while(opc!=9);
}


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: piladinamica caracteres
« Respuesta #1 en: 20 Noviembre 2013, 03:17 am »

Lo primero a cambiar son los nombres de los encabezados (los correctos son <cstdio> y <cstdlib>) y no deberías utilizar la biblioteca conio de Borland. Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

En C++ no necesitas de typedef para eliminar el uso de "struct" en una declaración, puedes utilizar sin problemas:
Código
  1. struct nodo { // nodo == etiqueta de la declaracion
  2.   string dat[n];
  3.   struct nodo *p;
  4. }
  5.  
  6. // La declaracion solo requiere la etiqueta
  7. nodo *tope = NULL;

El problema principal se debe a la declaración del nodo:
Código
  1. typedef struct nodo
  2. {
  3.    string dat[n];
  4.    struct nodo *p;
  5. }nod;
  6. nod *tope=NULL;
Con el indicas que cada nodo contendrá un array de cadenas y, al parecer, esa no es la intención. Si se trata de almacenar una cadena por nodo solo necesitas un objeto de tipo "string".

En la función que sigue (la función "push") tratas de asignar con:
Código
  1. nvo->dat[n] = ndat;
Eso no funcionara porque los indices validos para el array son 0 .. n-1, el elemento n no existe.

Y en la función "pop" tratas de imprimir el array:
Código
  1. cout << "\n Sale: " << aux->dat << endl;
Eso no tendrá el efecto indicado, en su lugar imprimirá la dirección del array (funcionaria correctamente si "dat" no fuera un array).

Bueno, primero tienes que corregir esa parte del programa.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Caracteres a-z A-Z 0-9
Programación Visual Basic
Kizar 5 2,457 Último mensaje 22 Enero 2006, 17:43 pm
por Kizar
Alguien sabe buscar palabra de x caracteres y los demás caracteres a continuació
Programación Visual Basic
usuario oculto 3 5,061 Último mensaje 2 Agosto 2010, 18:36 pm
por Psyke1
caracteres de 0 a 256?
Programación C/C++
flacc 3 2,267 Último mensaje 10 Febrero 2011, 18:41 pm
por Oblivi0n
cadena de caracteres
Programación C/C++
Ander123 1 2,361 Último mensaje 6 Septiembre 2012, 14:15 pm
por avesudra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines