Problema con busqueda en arreglo de string

Iniciado por MikeMonostone, 8 Noviembre 2012, 19:52 PM

0 Miembros y 1 Visitante están viendo este tema.

MikeMonostone

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!


#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;
}



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

naderST

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

buscar != estudiante[k]

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

MikeMonostone

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.
[SK-DOOM] Pensé que lo que haría sería fingir ser uno de esos sordomudos.

MikeMonostone

Cita de: naderST 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:

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.





/*
    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;
}

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

leosansan

Salvo pifia escondida ya funciona como quieres :
Código (cpp) [Seleccionar]

/*
    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()
{
    int j,k,cont =0;
    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 (  j = 0; j < tamFila; j++)
    {
        fflush (stdin);
        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: ";
    fflush (stdin);
    /*cin.getline(buscar, sizeof(buscar));*/
    cin >> buscar;
    for( k = 0; k < tamFila; k++)
        {
            /*int valorCmp = strcmp(estudiante[k], buscar);*/
            if ( strcmp(estudiante[k], buscar)==0 )
                {
                    cout << estudiante[k] << buscar<<endl;
                    cout << "=> "<< buscar << " por favor pase a pagar.";cont=1;break;
                }
        }
    if ( cont==0)  cout << "=> El que se fue de la fila pierde su silla, \n" ;
    cout <<"\n\n Personas en fila\n";
    for (  j = 0; j < tamFila; j++)
        {
            {
                cout << j+1 << ".- " <<estudiante[j] << endl;
            }
        }
    return 0;
}

Saludos!.