Cadenas a variables!! urgentee:(

Iniciado por chicainge, 14 Septiembre 2014, 19:30 PM

0 Miembros y 2 Visitantes están viendo este tema.

chicainge

alguien tiene idea de como hacer este ejercicio??

Escribir un algoritmo que lea en una línea (hasta que se pulse Return), mediante una
cadena de caracteres, el nombre, la edad y el sexo de una persona y los almacene en tres
variables distintas denominadas nombre, edad y sexo. Por ejemplo, para la entrada
"Pepe 20 v" el contenido de nombre será "Pepe", edad contendrá 20 y sexo 'v'.


tengo echo esto:

#include<iostream>

#define Return='\n'

using namespace std;

typedef TCad [30];

typedef struct{
 TCad nombre;
 unsigned edad;
 char sexo;
}TPersona;

int main(){
 TCad cad,cadaux;
 TPersona pers;  
 char c;
 int i=0;
 cout<< "introducir en una linea nombre edad sexo: ";
 cin.get(c);
 while(c!=Return){
   cad[i]=c;
   i++;
   cin.get(c);
 }
 //cin.getline(cad,30);
//a partir de aqui no se que hacer....!!!!!!!!!!!
 //for(int j=0; j<i ;j++){
   //while(cad[j]!='\n'){
     
     //if(cad[j]!='\0'){
       
     //}
   //}
 //}
}



llego a leer la cadena pero no se como separarla para meterlas en la variable TPersona.... alguna ideaa??Gracias.

flony

si un problema no tiene solucion entonces no es un problema...es algo inevitable

eferion

Usas C++, por lo que no veo un motivo claro que no te impida usar la clase string.

Además, 'cin', dispone de un método llamado 'getline'. Este método tiene el inconveniente de que requiere cadenas al estilo 'C', sin embargo, la stl dispone también de un método 'getline' y en esta ocasión si permite trabajar con strings.

Además, en C++ no hace falta usar 'typedef' para las estructuras... es redundante y queda feo.

Con estas dos características en mente, la cosa se simplifica bastante:

Código (cpp) [Seleccionar]

#include <iostream>
#include <string>

struct Persona
{
  std::string nombre;
  unsigned edad;
  char sexo;
};

int main( )
{
  std::string cad;
  std::cout<< "introducir en una linea nombre edad sexo: ";
  std::getline( std::cin, cad );

  Persona persona;
  int index = cad.find_first_of( ' ', 0 );
  persona.nombre = cad.substr( 0, index );

  int last = index + 1;
  index = cad.find_first_of( ' ', last );
  persona.edad = std::stoi( cad.substr( last, index - last ) );

  last = index + 1;
  persona.sexo = cad.at( last );
}


PD.: el código asume que estás metiendo los datos correctamente.

chicainge

da un error en la funcion stoi(), a mi me sale que no a sido declarada...falta alguna libreria?¿

eferion

compila con C++11.

Si no puedes usar C++11, entonces puedes usar la función atoi heredada de C.