Ayuda con un asunto en c++

Iniciado por andrecid, 16 Marzo 2015, 22:36 PM

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

andrecid

Hola, quería  preguntar una duda que tengo en c++ si no fuese una molestia bueno la verdad , es que me gusta bastante la programación y cuando me he adentrado a ella lo he decidido hacer mediante c++, la cosa es :

¿Cómo podría hacer que el usuario ingresase nombres y dependiendo de esos nombres pase algo?

Es decir el usuario ingresa por ejemplo : Julio o Andres o Paula y dependiendo de los nombres aparece un mensaje ( con cout ).

La verdad es que solo se me ocurre con if pero es que si tengo que hacer 40 nombres con if me puedo morir. ¿Me pueden decir otra forma de hacerlo sin if?

Ahora les quiero decir que esto no son mis deberes ni nada por el estilo, es más yo estoy estudiando programación por mi cuenta, si ustedes me ayudan se lo agradeceré si no me ayudan, ya me buscare otra forma de aprender.

Digo esto por que se que no les gusta resolver trabajos de nadie ( a mi tampoco me gustaría) y no quiero que ustedes piensen mal de mi.

Espero sus respuestas. Gracias .

ivancea96

Código (cpp) [Seleccionar]
string names[]={"Jose","Ivan","Manuel"};
string msg[] = {"Hola","Adios","Bye"};
string t;
getline(cin,t);
for(int i=0; i<3; i++)
    if(names[i]==t){
        cout << msg[i] << endl;
        break;
    }


Es un ejemplo.

Ariel_10


Hola bro, tambien puedes hacer algo como esto:

1. string names[] = {"Jose","Ivan","Manuel"};
2. string msg[]    = {"Hola","Adios","Bye"};

3. int n;

4. for(int i = 0; i <= names.length(); i++)
5.    cout << "Escriba el numero correspondiente con su nombre" + i.ToString() +"-" 
                    + names << endl;
cin>> n;

cout<<msg[n] + [n];
break;

NOTA: aca ahora no tengo el c++ instalado..puede que el i.ToString() no sea asi, tengo q corroborarlo, hace mucho tiempo lo hice...si no..InToStr(i)..prueba


Otra opcion es hacerlo con la sentencia switch, pero eso depende...observa que en este caso los arrays tienen la misma longitud...si no la tienen, da error...de no tener la misma longitud, lo haria con la sentencia switch

saludos

   

ivancea96

Recuerda colocar las etiquetas GeSHi.
No existe "names.length()".
Es to_string(), de la librería string.

Cita de: Ariel_10 en 17 Marzo 2015, 14:49 PM
cout<<msg[n] + [n];
msg[n] + [n]?

Switch no sirve para strings ni cadenas.

eferion

Cita de: ivancea96 en 17 Marzo 2015, 15:10 PM
Es to_string(), de la librería string.

Mejor que eso... en C++, los tipos básicos, entre los que se incluye int, no tienen métodos. i.ToString, siendo "i" un int, no va a compilar en ningúna versión de C++.

Ariel_10

Cita de: ivancea96 en 17 Marzo 2015, 15:10 PM
Recuerda colocar las etiquetas GeSHi.
No existe "names.length()".
Es to_string(), de la librería string.
msg[n] + [n]?

Switch no sirve para strings ni cadenas.

hace 1 año q no programo en c++...salte para C#.Net

cuando hable del switch decia hacer algo como

/*****/
4. for(int i = 0; i <= names.length(); i++)
5.    cout << "Escriba el numero correspondiente con su nombre" + i.ToString() +"-"
                    + names << endl;
cin>> n;

switch(n)
{
   case 0:
   cout<<msg[0] + names[0]; //Aqui en el post anterior me comi el names...sorry
   break;

/*****/
}

usaria el swicth...por ejemplo...si ademas mostrar la cadena...necesitara hacer algo mas...ademas de que me da la posibilidad de escoger que mensage mostrar, o sea, msg[1], msg[2], o como sea, claro, no mayor que la longitud del array...tratare de ser mas preciso para mi proximo post...pero por ahora dire q C++ tiene una libreria para generar numeros aleatorios en un intervalo tando de espacio como de tiempo...o sea...en 4 seg dame un numero entre 0 y la longitud del array msg...seria mas cool porque a la persona no le saldria el mismo mensage siempre...que creen?

eferion

Cita de: Ariel_10 en 17 Marzo 2015, 16:02 PM
hace 1 año q no programo en c++...salte para C#.Net

El problema es que plantear una solución que no sólo no es válida, sino que además puede llevar a confusión no es demasiado ético.

Si tienes dudas, hay compiladores online en los que puedes poner tu fragmento de código y verlo funcionar (con ciertas limitaciones, pero ahí están). Sin embargo, lo dicho, no deberías poner una solución basada en un híbrido entre .NET y C++.

Por otro lado, como te ha comentado ivancea, el código debe estar decorado con las etiquetas correspondientes y no, no es un capricho, es una de las normas del foro, por lo que te agradeceríamos su cumplimiento.

Por otro lado, no hace falta ningún switch en el código. Para que el código funcione necesitas dos índices: Uno para mostrar el nombre y otro para mostrar la frase. El primero lo estas obteniendo con el for y es la variable "i", mientras que el segundo lo introduce el usuario en la variable "n":

cuando hable del switch decia hacer algo como

Código (cpp) [Seleccionar]
for(int i = 0; i <= names.length(); i++)
{
  cout << "Escriba el numero correspondiente con su nombre" << i  << "-" << names << endl;
  cin >> n;
  cout << msg[n] << names[i]; //Aqui en el post anterior me comi el names...sorry
}



Cita de: Ariel_10 en 17 Marzo 2015, 16:02 PMpero por ahora dire q C++ tiene una libreria para generar numeros aleatorios en un intervalo tando de espacio como de tiempo

C++ tiene funciones para generar números aleatorios... y te los genera cuando se los pides. No se de dónde has sacado eso de que (si no te he entendido mal) tu le pides un número ahora y dentro de 4 segundos te lo facilita.

Y digo que tiene funciones porque en la versión C++11 el algoritmo de generación de números aleatorios es configurable (se puede elegir entre una serie de motores ya existentes o diseñar un motor propio). Pero aún así, lo dicho, el número te lo genera en cuanto lo pides.

Cita de: Ariel_10 en 17 Marzo 2015, 16:02 PMseria mas cool porque a la persona no le saldria el mismo mensage siempre...que creen?

Pudiera ser, pero según lo que comenta el usuario, las respuestas deben ser fijas, es decir, para el nombre X debe aparecer el texto Y... los números aleatorios no tienen cabida en su ejercicio.