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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con busqueda en arreglo de string
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con busqueda en arreglo de string  (Leído 3,139 veces)
MikeMonostone

Desconectado Desconectado

Mensajes: 7


[SK-DOOM] MikeMonoStone


Ver Perfil WWW
Problema con busqueda en arreglo de string
« en: 8 Noviembre 2012, 19:52 pm »

Saludos amigos!

Les pido que por favor le den una mirada a este código, el mismo tiene como fin almacenar en un array estático los nombres y apellidos de estudiantes esperando en una fila para pagar luego pedir un nombre y un apellido buscarlos y dar una salida en caso de encontrar o no.

Mi problema es que el bloque de codigo encargado de realizar la busqueda del nombre y apellido siempre evalúa a FALSE.

Encantado de estar entre ustedes, este es mi primer post en el foro y espero seguir activo en el mismo, desde ya gracias!

Código:
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{

    const int MAX = 100;        //Tamaños maximos para filas y columnas del arreglo
    const int TAM = 50;

    //Variables iniciadas para evitar valores basura

    char estudiante[MAX][TAM] = {" "};
    char buscar[TAM];
    int tamFila = 0;

    cout << "Este programa le permite capturar el nombre y apellido."
         << "\nde estudiantes esperando en fila, y tambien verifica si un \n"
         << "nombre introducido por teclado esta en la lista."
         << "\n_______________________________________________________\n\n\n";
    cout << "\t\t::Caja No. 511::\n";

    cout << "\nIntroduzca tamano de la fila:";
    cin >> tamFila;

    cout << "\nNombre y apellido estudiantes en fila.\n";
    for ( int j = 0; j <= tamFila; j++)
    {
        gets(estudiante[j]);
    }

   
cout << "\n\n\n\t<BUSQUEDA>\n "
         << "\tPara resultados positivos introduzca\n el nombre tal como lo escribio.\n\n"
         << "Nombre y apellido estudiante: ";

    cin.getline(buscar, sizeof(buscar));

//Esta es la parte que evalua si la entrada esta almacenada.   
for(int k = 0; k <= tamFila; k++)
    {
        if (buscar != estudiante[k])
        {

            cout << "El que se fue de la fila pierde su silla, " << buscar;
            break;

        }else{

            cout << "Pase a pagar.";
            break;

        }
    }

    cout <<"\n\n Personas en fila\n";

    for ( int j = 0; j <= tamFila; j++)
    {
        if (j != 0)
        {
            cout << j << ".- " <<estudiante[j] << endl;
        }

    }


return 0;
}





En línea

[SK-DOOM] Pensé que lo que haría sería fingir ser uno de esos sordomudos.
naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Problema con busqueda en arreglo de string
« Respuesta #1 en: 9 Noviembre 2012, 01:54 am »

Si estas programando en "C++" por qué no usas la clase String? Otra cosa, no puedes comparar dos strings de C de esta manera:

Código
  1. buscar != estudiante[k]

Debes usar strcmp() de la librería string.h. No se que otros errores puedas tener, pero soluciona eso primero.


En línea

MikeMonostone

Desconectado Desconectado

Mensajes: 7


[SK-DOOM] MikeMonoStone


Ver Perfil WWW
Re: Problema con busqueda en arreglo de string
« Respuesta #2 en: 9 Noviembre 2012, 14:32 pm »

Esto es parte de una tarea y me pedían que utilizara arreglos estáticos, siempre me paso por la mente utilizar string pero me atuve a lo que me pedían en la tarea.

Gracias amigo por la respuesta corregiré esto y luego posteo los resultados.

Un saludo.
En línea

[SK-DOOM] Pensé que lo que haría sería fingir ser uno de esos sordomudos.
MikeMonostone

Desconectado Desconectado

Mensajes: 7


[SK-DOOM] MikeMonoStone


Ver Perfil WWW
Re: Problema con busqueda en arreglo de string
« Respuesta #3 en: 12 Noviembre 2012, 18:52 pm »

Si estas programando en "C++" por qué no usas la clase String? Otra cosa, no puedes comparar dos strings de C de esta manera:

Código
  1. buscar != estudiante[k]

Debes usar strcmp() de la librería string.h. No se que otros errores puedas tener, pero soluciona eso primero.

Hice el cambio y utilice la función que me indicaste pero ahora siempre me evalua a 0.



Código:

/*
    PROBLEMAS Y ERRORES:

    1.- El ciclo FOR,para almacenar nombre y apellidos, me tira un numero mas
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main()
{

    const int MAX = 100;        //Tamaños maximos para filas y columnas del arreglo
    const int TAM = 50;

    //Variables iniciadas para evitar valores basura

    char estudiante[MAX][TAM] = {" "};
    char buscar[TAM] = {" "};
    int tamFila = 0;

    cout << "Este programa le permite capturar el nombre y apellido."
         << "\nde estudiantes esperando en fila, y tambien verifica si un \n"
         << "nombre introducido por teclado esta en la lista."
         << "\n_______________________________________________________\n\n\n";
    cout << "\t\t::Caja No. 511::\n";

    cout << "\nIntroduzca tamano de la fila:";
    cin >> tamFila;

    cout << "\nNombre y apellido estudiantes en fila.\n";
    for ( int j = 0; j <= tamFila; j++)
    {
        gets(estudiante[j]);

    }

    cout << "\n\n\n\t<BUSQUEDA>\n "
         << "\tPara resultados positivos introduzca\n el nombre tal como lo escribio.\n\n"
         << "Nombre y apellido estudiante: ";

    cin.getline(buscar, sizeof(buscar));

    for(int k = 0; k <= tamFila; k++)
    {
        int valorCmp = strcmp(estudiante[k], buscar);

       if ( valorCmp == 0)
        {

            cout << "=> El que se fue de la fila pierde su silla, " << buscar;
            break;

        }else{

            cout << "=> "<< buscar << " por favor pase a pagar.";
            break;

        }
    }


    cout <<"\n\n Personas en fila\n";

    for ( int j = 0; j <= tamFila; j++)
    {
        if (j != 0)
        {
            cout << j << ".- " <<estudiante[j] << endl;
        }

    }


return 0;
}

En línea

[SK-DOOM] Pensé que lo que haría sería fingir ser uno de esos sordomudos.
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con busqueda en arreglo de string
« Respuesta #4 en: 13 Noviembre 2012, 00:28 am »

Salvo pifia escondida ya funciona como quieres :
Código
  1. /*
  2.     PROBLEMAS Y ERRORES:
  3.  
  4.     1.- El ciclo FOR,para almacenar nombre y apellidos, me tira un numero mas
  5. */
  6. #include <iostream>
  7. #include <cstdio>
  8. #include <cstring>
  9. using namespace std;
  10.  
  11. int main()
  12. {
  13.    int j,k,cont =0;
  14.    const int MAX = 100;        //Tamaños maximos para filas y columnas del arreglo
  15.    const int TAM = 50;
  16.  
  17.    //Variables iniciadas para evitar valores basura
  18.  
  19.    char estudiante[MAX][TAM];
  20.    char buscar[TAM];
  21.    int tamFila = 0;
  22.    cout << "Este programa le permite capturar el nombre y apellido."
  23.         << "\nde estudiantes esperando en fila, y tambien verifica si un \n"
  24.         << "nombre introducido por teclado esta en la lista."
  25.         << "\n_______________________________________________________\n\n\n";
  26.    cout << "\t\t::Caja No. 511::\n";
  27.    cout << "\nIntroduzca tamano de la fila:";
  28.    cin >> tamFila;
  29.    cout << "\nNombre y apellido estudiantes en fila.\n";
  30.    for (  j = 0; j < tamFila; j++)
  31.    {
  32.        fflush (stdin);
  33.        gets(estudiante[j]);
  34.    }
  35.    cout << "\n\n\n\t<BUSQUEDA>\n "
  36.         << "\tPara resultados positivos introduzca\n el nombre tal como lo escribio.\n\n"
  37.         << "Nombre y apellido estudiante: ";
  38.    fflush (stdin);
  39.    /*cin.getline(buscar, sizeof(buscar));*/
  40.    cin >> buscar;
  41.    for( k = 0; k < tamFila; k++)
  42.        {
  43.            /*int valorCmp = strcmp(estudiante[k], buscar);*/
  44.            if ( strcmp(estudiante[k], buscar)==0 )
  45.                {
  46.                    cout << estudiante[k] << buscar<<endl;
  47.                    cout << "=> "<< buscar << " por favor pase a pagar.";cont=1;break;
  48.                }
  49.        }
  50.    if ( cont==0)  cout << "=> El que se fue de la fila pierde su silla, \n" ;
  51.    cout <<"\n\n Personas en fila\n";
  52.    for (  j = 0; j < tamFila; j++)
  53.        {
  54.            {
  55.                cout << j+1 << ".- " <<estudiante[j] << endl;
  56.            }
  57.        }
  58.    return 0;
  59. }
Saludos!.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines