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

Problema manejo de String C++ IDE Anjuta Linux

Estas en el tema de Problema manejo de String C++ IDE Anjuta Linux en el foro de C/C++ en Foros del Web. Saludos, soy nuevo en este foro. Resulta que tengo un problema. Estoy programando en el lenguaje C++, con el IDE Anjuta corriendo bajo linux mint. ...
  #1 (permalink)  
Antiguo 09/05/2012, 20:44
 
Fecha de Ingreso: mayo-2012
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
Desacuerdo Problema manejo de String C++ IDE Anjuta Linux

Saludos, soy nuevo en este foro. Resulta que tengo un problema. Estoy programando en el lenguaje C++, con el IDE Anjuta corriendo bajo linux mint. Resulta que con dicho codigo tengo un problema. Cuando comparo dos string, usando strcmp (st1, st2) me deberia dar 0 cuando el primer apellido es GONZALEZ, pero resulta que depurando el problema me tira 10. Si alguien me puede ayudar y dar una solucion le agradeceria. Saludos

Código:
#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;
int main()
{
	int comparacion;
	char sApellido1[21], sApellido2[21];
	cout<<"Ingrese el primer apellido [En mayusculas, max. 20 caracteres.]: ";
	fgets(sApellido1,21,stdin);
	cout<<"Ingrese el segundo apellido [En mayusculas, max. 20 caracteres.]: ";
	fgets(sApellido2,21,stdin);
	comparacion=strcmp(sApellido1,"GONZALEZ");
	if(comparacion==0)
		cout<<"ATENCIÓN: El primer alumno se llama GONZÁLEZ\n";
	if(!(strcasecmp(sApellido1,sApellido2)))
		cout<<"ATENCIÓN: Ambos apellidos son iguales.";
	else
	{
	if((strcasecmp(sApellido1,sApellido2))<0)
		cout<<sApellido1<<sApellido2;	
	else
		cout<<sApellido2<<sApellido1;	
	}
		
		
	return 0;
}
  #2 (permalink)  
Antiguo 09/05/2012, 21:22
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Problema manejo de String C++ IDE Anjuta Linux

Hola! el problema es q usas fgets. Esta funcion ademas de almacenar en un puntero la cadena ingresada tambien almacena el caracter ENTER, es decir si vos ingresas "gonzales" por teclado lo que se va a almacenar en sApellido1 es: "gonzales\n"(incluyendo el '\n') lo cual es distinto a "gonzales".. En el primer strcmp lo q podes hacer es
Código C:
Ver original
  1. comparacion=strcmp(sApellido1,"GONZALEZ\n");
o usar otra funcion q no almacene el enter

Saludos
  #3 (permalink)  
Antiguo 10/05/2012, 05:14
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema manejo de String C++ IDE Anjuta Linux

Puedes cambiar ese caracter por el 0. algo asi:

Código C:
Ver original
  1. function EliminarSaltoLinea(char * c) {
  2.     int i = 0;
  3.     while ( c[i] != '\0'  ) {
  4.              if (c[i] == '\n' ) c[i] = '\0';
  5.              i++;
  6.     }
  7. }
  8.  
  9.  
  10.  
  11. fgets(sApellido1,21,stdin);
  12. EliminarSaltoLinea(sApellido1);
  #4 (permalink)  
Antiguo 10/05/2012, 05:33
 
Fecha de Ingreso: mayo-2012
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema manejo de String C++ IDE Anjuta Linux

Muchas gracias por la pronta respuesta, la verdad que use el fgets porque no me quedaba otra. Porque intente obtener el string a través de :
Código:
fflush(stdin);
gets(char);
Obviamente con todos los include y con todos los string, pero en linux y bajo adjunta no me funcionaban correctamente estas sentencias. ¿Como puedo hacer para que me funcione?¿O que otra forma de obtener el caracter conocen y me recomiendan? Muchas gracias, saludos.
  #5 (permalink)  
Antiguo 10/05/2012, 09:11
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Problema manejo de String C++ IDE Anjuta Linux

Hola! q raro q con el gets no puedas, si vas a usar dos gets no es necesario el fflush ya que gets, sino me equivoco, no deja el enter en el bufer de entrada... Tambien podes usar scanf, pero veo q estas programando en C++, cin no te permite el ingreso de string?? tambien creo q tenes cin.getline. Hay muchas es solo cuestion de ver el man

Saludos
  #6 (permalink)  
Antiguo 16/05/2012, 16:56
 
Fecha de Ingreso: mayo-2012
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema manejo de String C++ IDE Anjuta Linux

Muchas gracias por su colaboración, la verdad que me sirvió muchisimo y me saco de un apuro. Ahora ya complicando un poco mas el programa, intente hacer esto pero me termino haciendo cualquiera. Cuando entra al while y me tiene que tirar "Ingrese el titulo de la obra" no me permite tomar ese dato que ingreso porque me tira las dos líneas juntas. Que estoy haciendo mal ahora? Desde ya muchas gracias.
Código:
#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;
int main()
{
	char sTitulo[51], sAutor[51], sEditorial[51], sTituloRec[51], sAutorRec[51];
	int iAnioEdic, iAnioEdicRec=0, iCont=0;
	cout<<"Ingrese el titulo de la obra: ";
	cin.getline(sTitulo, 51);
	cout<<"Ingrese el autor de la obra: ";
	cin.getline(sAutor, 51);
	cout<<"Ingrese la editorial de la obra: ";
	cin.getline(sEditorial, 51);
	cout<<"Ingrese el año de edición: ";
	cin>>iAnioEdic;
	while (strcasecmp(sTitulo, "FIN"))
	{
	if (!(strcasecmp(sEditorial, "AMERICANA")))
			iCont++;
	if(iAnioEdic>iAnioEdicRec)
		{
		strcpy(sTitulo, sTituloRec);
		strcpy(sAutor, sAutorRec);
		}
	cout<<"Ingrese el titulo de la obra: ";
	cin.getline(sTitulo, 51);
	cout<<"\nIngrese el autor de la obra: ";
	cin.getline(sAutor, 51);
	cout<<"Ingrese la editorial de la obra: ";
	cin.getline(sEditorial, 51);
	cout<<"Ingrese el año de edición: ";
	cin>>iAnioEdic;
	}
	cout<<"El libro de la edición más reciente es el libro titulado "<<sTituloRec<<" realizada por "<<sAutorRec<<" editada el año "<<iAnioEdicRec<<" .";
	cout<<"\nSe ingresaron "<<iCont<<" libros de la editorial Americana.";
	return 0;
}
  #7 (permalink)  
Antiguo 16/05/2012, 17:28
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Problema manejo de String C++ IDE Anjuta Linux

Hola! nose casi nada de C++ pero me suena a q los cin estan tomando los enter q quedan en el bufer.. pone fflush despues de cada cin

Saludos

Etiquetas: anjuta, caracteres, char, linux, strcmp, string, cadenas
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 19:17.