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

Problema con caracter /

Estas en el tema de Problema con caracter / en el foro de C/C++ en Foros del Web. Hola, estoy tratando de hacer un código que me lea un path leído de teclado y me cambie los carácteres "\" "/" por un doble ...
  #1 (permalink)  
Antiguo 24/11/2011, 08:47
 
Fecha de Ingreso: mayo-2011
Mensajes: 60
Antigüedad: 12 años, 11 meses
Puntos: 1
Problema con caracter /

Hola, estoy tratando de hacer un código que me lea un path leído de teclado y me cambie los carácteres "\" "/" por un doble "\", es decir por "\\". A la hora de hacer el "\" ha sido muy facil, he creado una var char slash="\\" que es la que comparo al valor que quiero. Sin embargo para hacer el "/" no lo consigo. He probado con "\/" pero / no es carácter especial por lo que no funciona. También he probado con '/',"/", '//',"//"y hasta igualándolo a 47 (su código ascii), sin embargo siempre se me salta la condición. ¿Alguna sugerencia de como debería hacerlo? Muchas gracias de antemano.

Mi código:
Código:
	char slash='\\', contraslash=47;
	for(cont1=0;cont1<textLength;cont1++){
		if (ret==0){
			if(path_[cont1]!=slash){
				(*newPath_)[cont2]=path_[cont1];
				cont2++;
			}
			else if((path_[cont1]==slash)or(path_[cont1]==contraslash)){
				(*newPath_)[cont2]=slash;
				cont2++;
				(*newPath_)[cont2]=slash;
				cont2++;
			}
			else{
				//tratamiento errores
				ret=1;
			}
		}
	}
  #2 (permalink)  
Antiguo 25/11/2011, 02:08
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Problema con caracter /

¿ Qué quieres decir con "me salta la condición"? Yo lo que veo dentro del bloque de if (ret==0) es:

En el primer if pones la condición (path_[cont1] != slash. Si esta condición no se cumple, es que path_[cont1] es igual a slash, con lo que la condición que has puesto en el if del primer else es siempre cierta. Además, el bloque del segundo else no se ejecutará jamás, ya que, tal como lo has puesto, path_[cont1] solo puede ser distinto de slash (se ejecuta el bloque del if) ó igual a slash (bloque if del primer else).

Lo que tienes que hacer es comprobar si el carácter es igual a slash Ó igual a contraslash, o bien, si es distinto de slash Y distinto de contraslash (que es el caso que te pongo como ejemplo):

Código C:
Ver original
  1. if (ret==0)
  2.         {
  3.             if ( (path_[cont1]!=slash) && (path_[cont1]!=contraslash) )
  4.                         {
  5.                 (*newPath_)[cont2]=path_[cont1];
  6.                 cont2++;
  7.             }
  8.             else
  9.                         {
  10.                 (*newPath_)[cont2]=slash;
  11.                 cont2++;
  12.                 (*newPath_)[cont2]=slash;
  13.                 cont2++;
  14.             }
  15.             else
  16.                         {
  17.                               // A lo que has puesto aquí como tratamiento de errores no llegaría
  18.                 //tratamiento errores
  19.                 ret=1;
  20.             }
  21.         }

Saludos,
  #3 (permalink)  
Antiguo 25/11/2011, 02:47
 
Fecha de Ingreso: mayo-2011
Mensajes: 60
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problema con caracter /

Hola, muchas gracias!! el problema eran las condiciones, que las tenía en el orden incorrecto!!! lo estuve intentando horas y no había manera, muchísimas gracias por decirme donde me estaba equivocando.
Código:
	for(cont1=0;cont1<textLength;cont1++){
		if (ret==0){
			if((path_[cont1]==slash)or(path_[cont1]==contraslash)){
				(*newPath_)[cont2]=slash;
				cont2++;
				(*newPath_)[cont2]=slash;
				cont2++;
			}
			else if(path_[cont1]!=slash){
				(*newPath_)[cont2]=path_[cont1];
				cont2++;
			}
			else{
				//tratamiento errores
				ret=1;
			}
		}
	}
Saludos!

Etiquetas: funcion, caracteres
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:41.