Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Saber si "erase" inseta por si sola el "\0"

Estas en el tema de Saber si "erase" inseta por si sola el "\0" en el foro de C/C++ en Foros del Web. Hola a todos Es mi primer post y voy a presentarme Tengo 56 años y soy un apasionado en la programación, como emprenderán por mi ...
  #1 (permalink)  
Antiguo 01/05/2008, 19:05
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Saber si "erase" inseta por si sola el "\0"

Hola a todos
Es mi primer post y voy a presentarme
Tengo 56 años y soy un apasionado en la programación, como emprenderán
por mi edad me es bastante difícil ir ya a la universidad por lo tanto lo qué
hago es leer tutorías y post en los foros para aprender a programar en C++,
lo único que les pido es que sean un poco mas tolerantes que si tuviera 20 años.-

2 preguntas
La primera es saber si al cortar el string con erase este me asegura que
pondrá al final de misma el "\0" o debe insertarlo manualmente...?
La segunda, sera posible y conveniente hacer una función con la
siguiente linea de código...?

Código:
if (cantidad > 30) 
{ 
    nombre.erase (30,cantidad); 
    cout << "Ingreso Maximo 30 caracteres (ingresados " << cantidad
    << ")" << endl; 
    cout << "'Nombre' sera grabado asi............:" << nombre << endl
    << endl; 
}
De ser así me pondrían hacer un pequeño ejemplo teniendo en cuenta
las 3 llamadas...? (no es que quiero qué me hagan el trabajo sin presentar
ningún avance, simplemente es porqué como autodidacta me cuesta un
poco hacer las primeras funciones.-

Les dejo parte del código que quiero hacer (Alta,Baja,Modificación de Clientes)

Código:
include <iostream> 
#include <cstring> 
#include <cstdlib> 

using namespace std; 

int main(int argc, char *argv[]) 

{ 
     string nombre,calle,ciudad; 
     int cantidad = 0; 

     cout << "Ingrese nombre(maximo 30 caracteres).:"; 
     getline(cin,nombre); 
     cantidad = nombre.length(); 
     if (cantidad > 30) 
     { 
          nombre.erase (30,cantidad); 
          cout << "Ingreso Maximo 30 caracteres (ingresados " << cantidad
          << ")" << endl; 
          cout << "'Nombre' sera grabado asi............:" << nombre << endl
          << endl; 
     } 
     cout << "Ingrese calle(maximo 20 caracteres).:"; 
     getline(cin,calle); 
     cantidad = calle.length(); 
     if (cantidad > 20) 
     { 
          calle.erase (20,cantidad); 
          cout << "Ingreso Maximo 20 caracteres (ingresados " << cantidad
          << ")" << endl; 
          cout << "'Calle' sera grabado asi............:" << calle << endl << endl; 
     } 

     cout << "Ingrese ciudad(maximo 20 caracteres).:"; 
     getline(cin,ciudad); 
     cantidad = ciudad.length(); 
     if (cantidad > 20) 
     { 
          ciudad.erase (20,cantidad); 
          cout << "Ingreso Maximo 20 caracteres (ingresados " << cantidad
          << ")" << endl; 
          cout << "'Ciudad' sera grabado asi............:" << ciudad << endl
         << endl; 
     } 

     cout << "" << endl; 
     cout << "Apriete <Enter> para cerrar la ventana..."; 
     cin.get(); 

     return EXIT_SUCCESS; 
}
Muchas gracias por el tiempo que cada uno desee dedicarle a este post.
Daniel

Última edición por RoDaVi; 01/05/2008 a las 19:17 Razón: Modificar la despedida
  #2 (permalink)  
Antiguo 02/05/2008, 10:53
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Saber si "erase" inseta por si sola el "\0"

Que tal RoDaVi, lo que pudiera comentarte es que al trabajar con Strings las funciones que emplees te aseguran la inserción de los nulos al final de la cadena. Algo que si veo cuando cortas la cadena

Código:
nombre.erase (30,cantidad);
es que en la variable cantidad contiene la longitud total de la cadena y tu solo quieres cortar la diferencia, esto es,

Código:
nombre.erase (30,cantidad-30);
Con esto, puedes evitar que se desborde algun segmento de memoria cuando el sistema corte el exceso...

Algo que no entendí es a que te refieres con las 3 llamadas???
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #3 (permalink)  
Antiguo 02/05/2008, 11:46
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Re: Saber si "erase" inseta por si sola el "\0"

Hola Mephisto
Gracias por la aclaración, error de principiante supongo,
en cuanto a las 3 llamadas me refería a esto.
Código:
if (cantidad > 30) 
{ 
    nombre.erase (30,cantidad-30); 
    cout << "Ingreso Maximo 30 caracteres (ingresados " << cantidad
    << ")" << endl; 
    cout << "'Nombre' sera grabado asi............:" << nombre << endl
    << endl; 
}
Como las 3 son similares quería hacer una sola función para todas,
lo que pasa que como me estoy iniciando me cuesta el echo de hacer
prototipos y funciones y necesitaba un ej.-

Muchas gracias por tú tiempo y un bran abrazo
Daniel
  #4 (permalink)  
Antiguo 02/05/2008, 15:33
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Saber si "erase" inseta por si sola el "\0"

Puedes hacer una función que reciba el titulo del dato a almacenar, la longitud máxima del string y que regrese la cadena almacenada

Código:
string FuncionCarga(string TituloDato,int LongDato){

    cout<<Ingrese...
    //Aqui colocarias el codigo de la funcion similar a lo que ya tienes pero 
   //considerando las variables

}
Y al mandarla llamar quedaria algo así

Código:
nombre = FuncionCarga("Nombre",30);
Esto pudiera servirte para reducir tu código...

Saludos...
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #5 (permalink)  
Antiguo 02/05/2008, 15:35
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Saber si "erase" inseta por si sola el "\0"

Perdon, se me paso mencionar que en la funcion no olvides regresar la cadena:

Código:
string FuncionCarga(string TituloDato,int LongDato){
   
    string CadenaUsr;

    cout<<Ingrese...
    //Aqui colocarias el codigo de la funcion similar a lo que ya tienes pero 
   //considerando las variables

  return CadenaUsr;
}
No coloco como quedaría toda la función para no afectar tu proceso de aprendizaje, pero cualquier duda aqui estamos los del foro... =)
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:42.