Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Problema con String
Autor Mensaje
cloferba Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Otra
Facultad Regional Santa Fe

Mensajes: 45
Agradecimientos dados: 2
Agradecimientos: 2 en 2 posts
Registro en: Sep 2014
Mensaje: #1
Problema con String Dudas y recomendaciones Algoritmos y Estructuras de Datos
Hola a todos

Tengo un problema que no logro resolver. El usuario debe colocar su nombre y apellido y el script tiene que tomar la primera letra del nombre y agregarle el apellido. Por ejemplo:
Juan Perez
..debe quedar:
JPerez


#include <iostream>
#include <string>
using namespace std;
/*
Diseñar un programa que permita generar direcciones de correo electrónico.
El programa recibe el apellido y nombre de un usuario de la facultad (apellido y nombre se asignan a una sola variable)
y debe retornar la dirección de correo electrónico (e-mail) generada. El dominio asignado a la Facultad para el e-mail es:
frsf.edu.ar, y el nombre de usuario se forma con la inicial del nombre y a continuación el apellido.
*/
int main(int argc, char *argv[]) {
int contador=0;
string nombre;
string email;
getline (cin,nombre);
email[0]=nombre[0];
for (int i=0;nombre[i]!=' ';i++){
//busca la posicion del espacio para agregar el apellido al email
contador=i;
}
//comenzamos a buscar el final de linea a partir de la 1ra letra luego del espacio
for (int a=contador+1;nombre[a]!='\0';a++){
email+= nombre[a];
}
cout<<email;
return 0;
}


Lo que esta saliendo en vez de JPerez es 'espacio'Perez.
Porque no toma la J?
Con email[0]=nombre[0]; ya deberia tomarla dado que le asigna la primera letra de Nombre a la primera posicion, sin embargo no funciona.

Alguna idea?
03-03-2016 12:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Agro Sin conexión
Presidente del CEIT
Su marca puede estar aquí
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 6.760
Agradecimientos dados: 252
Agradecimientos: 888 en 293 posts
Registro en: Jul 2008
Facebook Twitter
Mensaje: #2
RE: Problema con String
Fijate que tiene nombre[1], nombre[2] y asi, a ver si el resto se esta cargando bien.
Por otro lado, el primer for tiene toda la pinta de que deberia ser un while

[Imagen: digitalizartransparent.png]
03-03-2016 12:38
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
cloferba Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Otra
Facultad Regional Santa Fe

Mensajes: 45
Agradecimientos dados: 2
Agradecimientos: 2 en 2 posts
Registro en: Sep 2014
Mensaje: #3
RE: Problema con String
(03-03-2016 12:38)Adriano escribió:  Fijate que tiene nombre[1], nombre[2] y asi, a ver si el resto se esta cargando bien.
Por otro lado, el primer for tiene toda la pinta de que deberia ser un while

Si, puede ser reemplazado por un while pero en este caso cual seria la ventaja? La finalidad se cumple igual.. pregunto de onda para saber si me pueden bochar por haber metido un for en lugar de while
Puse un for para buscar las lineas hasta el final..para buscar en un arreglo o un string tengo entendido se usa el for porque vas incrementando por 1 el valor de sus posiciones en cada ciclo

Edit: Hice un cout de email [0] y definitivamente no se muestra la primera letra.

Edit 2:

Estoy mas perdido:
cout<<email[0]; muestra la primera letra
cout<<email; me muestra la primera letra como un espacio
[Imagen: mMCRcv2.png]


string nombre;
string email;
getline (cin,nombre);
email[0]=nombre[0];
cout<<"Cout de la posicion 0 del string email:"<<endl;
cout<<email[0];
cout<<endl<<"Cout de todo el string email:"<<endl;
cout<<email;

(Este mensaje fue modificado por última vez en: 03-03-2016 12:52 por cloferba.)
03-03-2016 12:42
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rod77 Sin conexión
Presidente del CEIT
:o
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.164
Agradecimientos dados: 154
Agradecimientos: 498 en 217 posts
Registro en: Mar 2011
Mensaje: #4
RE: Problema con String
El problema es que contador queda con la posición antes del espacio.
por ejemplo:
JUAN PEREZ
Queda contador=3
Es decir que "a" le estas asignando 4, y queda en el espacio.

Lo segundo, es que verifiques la concatenacion, ya que esto: "email+= nombre[a];" me parece que esta mal, y te esta pisando todo (por eso no aparece la primer letra)
03-03-2016 12:59
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
cloferba Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Otra
Facultad Regional Santa Fe

Mensajes: 45
Agradecimientos dados: 2
Agradecimientos: 2 en 2 posts
Registro en: Sep 2014
Mensaje: #5
RE: Problema con String
(03-03-2016 12:59)rod77 escribió:  Lo segundo, es que verifiques la concatenacion, ya que esto: "email+= nombre[a];" me parece que esta mal, y te esta pisando todo (por eso no aparece la primer letra)
Creo que viene por aca el tema...no se que verificar, la concatenacion tendria que conservar el valor inicial del string y agregarle lo especificado..
Tal como decis, esta pisando todo, como hago entonces para conservar el primer caracter del string?
03-03-2016 13:07
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
crackOverflow Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Mar 2016
Mensaje: #6
RE: Problema con String
Declara otro contador que empiece en 1 arriba del segundo for y hace:
email[nuevocontador] = nombre[a]
y antes de salir del for incrementa en uno el nuevocontador.
También acordate de incrementar en uno a tu variable a antes del segundo for para que no empiece en el espacio en blanco.

Lo que te estaba pasando es que al hacer email =+ nombre [] estabas pisando la letra que ya habias asignado por un espacio en blanco.
03-03-2016 14:54
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
cloferba Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Otra
Facultad Regional Santa Fe

Mensajes: 45
Agradecimientos dados: 2
Agradecimientos: 2 en 2 posts
Registro en: Sep 2014
Mensaje: #7
RE: Problema con String
(03-03-2016 14:54)crackOverflow escribió:  Declara otro contador que empiece en 1 arriba del segundo for y hace:
email[nuevocontador] = nombre[a]
y antes de salir del for incrementa en uno el nuevocontador.
También acordate de incrementar en uno a tu variable a antes del segundo for para que no empiece en el espacio en blanco.

Lo que te estaba pasando es que al hacer email =+ nombre [] estabas pisando la letra que ya habias asignado por un espacio en blanco.
No entendi nada. Por que motivo hacer un nuevo contador?
Si me podrias poner un ejemplo estaria muy agradecido
03-03-2016 15:27
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Agro Sin conexión
Presidente del CEIT
Su marca puede estar aquí
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 6.760
Agradecimientos dados: 252
Agradecimientos: 888 en 293 posts
Registro en: Jul 2008
Facebook Twitter
Mensaje: #8
RE: Problema con String
El tema del for o el while es conceptual mas que nada. Un serrucho te sirve para clavar un clavo? si, pero probablemente no sea lo mejor
El for esta pensado para iterar una N cantidad de veces. El while hasta que X condicion no se cumpla. Un while con un contador adentro es algo perfectamente valido.

Y si queres ir un paso mas alla (tranqui, si estas recien arrancando dejalo para despues), mirate esto: http://www.tutorialspoint.com/c_standard...strtok.htm

Saludos!

[Imagen: digitalizartransparent.png]
03-03-2016 15:32
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rod77 Sin conexión
Presidente del CEIT
:o
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.164
Agradecimientos dados: 154
Agradecimientos: 498 en 217 posts
Registro en: Mar 2011
Mensaje: #9
RE: Problema con String
La idea es que lo pienses y que veas que hay varias formas de hacerlo, ademas de buscar variantes.

YO crearia una variable mas que sea "apellido" y el 2do for lo grabe ahi.
y al final usar la funcion append.

algo asi:


int main(int argc, char *argv[]) {
int contador=0;
string nombre;
string apellido;
string email;
getline (cin,nombre);
for (int i=0;nombre[i]!=' ';i++){
//busca la posicion del espacio para agregar el apellido al email
contador=i;
}
//comenzamos a buscar el final de linea a partir de la 1ra letra luego del espacio
for (int a=contador+1;nombre[a]!='\0';a++){
apellido+= nombre[a];
}
email.append(nombre[0]);
email.append(apellido);
cout<<email;
return


Igual fijate si hace lo que queres,ya que no se si funciona, y no se si podes usar dicha funcion. Talvez podes hacer algo tipo email = nombre[0]+apellido. Pero como no se en que estas desarrollando se hace dificil.
03-03-2016 16:07
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)