Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: chicainge en 14 Septiembre 2014, 19:30 pm



Título: Cadenas a variables!! urgentee:(
Publicado por: chicainge en 14 Septiembre 2014, 19:30 pm
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:

Código:
#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.


Título: Re: Cadenas a variables!! urgentee:(
Publicado por: flony en 15 Septiembre 2014, 02:53 am
digo no sera mas facil el uso de http://www.cplusplus.com/reference/string/string/substr/ (http://www.cplusplus.com/reference/string/string/substr/)


Título: Re: Cadenas a variables!! urgentee:(
Publicado por: eferion en 15 Septiembre 2014, 09:00 am
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
  1. #include <iostream>
  2. #include <string>
  3.  
  4. struct Persona
  5. {
  6.  std::string nombre;
  7.  unsigned edad;
  8.  char sexo;
  9. };
  10.  
  11. int main( )
  12. {
  13.  std::string cad;
  14.  std::cout<< "introducir en una linea nombre edad sexo: ";
  15.  std::getline( std::cin, cad );
  16.  
  17.  Persona persona;
  18.  int index = cad.find_first_of( ' ', 0 );
  19.  persona.nombre = cad.substr( 0, index );
  20.  
  21.  int last = index + 1;
  22.  index = cad.find_first_of( ' ', last );
  23.  persona.edad = std::stoi( cad.substr( last, index - last ) );
  24.  
  25.  last = index + 1;
  26.  persona.sexo = cad.at( last );
  27. }

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


Título: Re: Cadenas a variables!! urgentee:(
Publicado por: chicainge en 15 Septiembre 2014, 11:48 am
da un error en la funcion stoi(), a mi me sale que no a sido declarada...falta alguna libreria?¿


Título: Re: Cadenas a variables!! urgentee:(
Publicado por: eferion en 15 Septiembre 2014, 12:04 pm
compila con C++11.

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