Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: sora_ori en 6 Febrero 2013, 20:33 PM

Título: Help! Programa para sustituir un carácter en C
Publicado por: sora_ori en 6 Febrero 2013, 20:33 PM
Buenas,

Estoy haciendo un programa en C que dada una frase te pregunta para sustituir un carácter y luego te pide el carácter para reemplazarlo.


El programa me falla después de introducir el caracter a buscar:

(http://i49.tinypic.com/149o6xy.png)


#include <stdio.h>
#include <conio.h>
#include <string.h>

void main(){


char cadena[100];
char cambiar;
char sustituir;
int i;

printf("Escribe una frase: "); //obtiene la cadena
gets(cadena);
printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar
scanf("%c",&cambiar);
printf("\nCaracter sustituto: "); //caracter sustituto
scanf("%c",&sustituir);

for (i=0;i<=strlen(cadena)-1;i++){ //recorremos la cadena
   if (cadena[i]==cambiar){ //compara
      cadena[i]==sustituir; //cambia el valor si lo encuentra
      } //end if
      } //end for
     
   printf("\n");
   printf("%s",cadena); //muestra en pantalla la nueva cadena
   printf("\n");
   
 system("pause");
 return 0;
}
Título: Re: Help! Programa para sustituir un carácter en C
Publicado por: amchacon en 6 Febrero 2013, 21:11 PM
Tienes que limpiar el buffer de entrada o bien usar sscanf junto a fgets:

char linea[10];
fgets(linea, sizeof(linea), stdin);
sscanf(linea, "%d",&cambiar);
Título: Re: Help! Programa para sustituir un carácter en C
Publicado por: xassiz~ en 6 Febrero 2013, 21:12 PM
Aparte de lo del buffer, se te coló un igual de más aquí:
      cadena[i]==sustituir;
Título: Re: Help! Programa para sustituir un carácter en C
Publicado por: sora_ori en 6 Febrero 2013, 21:19 PM
Gracias, se me había colado un "=" de más.


Aunque lo del buffer no lo entiendo, lo he puesto así:


printf("Escribe una frase: "); //obtiene la cadena
fgets(cadena, sizeof(cadena), stdin);
sscanf(cadena, "%d",&cambiar);
printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar
scanf("%c",&cambiar);
printf("\nCaracter sustituto: "); //caracter sustituto
scanf("%c",&sustituir);
Título: Re: Help! Programa para sustituir un carácter en C
Publicado por: xassiz~ en 6 Febrero 2013, 21:28 PM
Pero tú no quieres un double (%d). El tema del buffer te lo explica muy bien Littlehorse en este tema (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Saludos!
Título: Re: Help! Programa para sustituir un carácter en C
Publicado por: sora_ori en 6 Febrero 2013, 21:33 PM
Si lo hago de esa forma no me pide por pantalla el caracter para sustituir.


printf("Escribe una frase: "); //obtiene la cadena
fgets(cadena, sizeof(cadena), stdin);
printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar
sscanf(cadena, "%d",&cambiar);
printf("\nCaracter sustituto: "); //caracter sustituto
scanf("%c",&sustituir);


Título: Re: Help! Programa para sustituir un carácter en C
Publicado por: leosansan en 6 Febrero 2013, 23:02 PM
Cita de: sora_ori en  6 Febrero 2013, 21:33 PM
Si lo hago de esa forma no me pide por pantalla el caracter para sustituir.
Pues de esta otra sí:
Código (cpp) [Seleccionar]
#include <stdio.h>

int main(){
char cadena[100];
char cambiar;
char sustituir;
int i;
printf("Escribe una frase: "); //obtiene la cadena
gets(cadena);
printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar
scanf("%c",&cambiar);
while (getchar ()!='\n');
printf("\nCaracter sustituto: "); //caracter sustituto
scanf("%c",&sustituir);
for (i=0;cadena[i]!='\0';i++){ //recorremos la cadena
    if (cadena[i]==cambiar){ //compara
        cadena[i]=sustituir; //cambia el valor si lo encuentra
    }
    //end if
} //end for
    printf("\n");
    printf("%s",cadena); //muestra en pantalla la nueva cadena
    printf("\n");
  system("pause");
  return 0;
}

Saluditos!.
Título: Re: Help! Programa para sustituir un carácter en C
Publicado por: xassiz~ en 6 Febrero 2013, 23:18 PM
Cita de: sora_ori en  6 Febrero 2013, 21:33 PM
Si lo hago de esa forma no me pide por pantalla el caracter para sustituir.

#include <stdio.h>
#include <string.h>

int main(){
int i;
char buffer[100], cadena[100], cambiar, sustituir;

printf("Escribe una frase: "); //obtiene la cadena
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer, "%s", &cadena);

printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer, "%c", &cambiar);

printf("\nCaracter sustituto: "); //caracter sustituto
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer, "%c", &sustituir);

for (i=0;i<=strlen(cadena)-1;i++){ //recorremos la cadena
if (cadena[i]==cambiar)
cadena[i]=sustituir;
}

printf("\n%s\n",cadena); //muestra en pantalla la nueva cadena

return 0;
}


Saludos!
Título: Re: Help! Programa para sustituir un carácter en C
Publicado por: sora_ori en 6 Febrero 2013, 23:20 PM
Muchas gracias por la ayuda!!

Perfecto y comprendido


Un saludo
Título: Re: Help! Programa para sustituir un carácter en C
Publicado por: rir3760 en 7 Febrero 2013, 16:50 PM
La forma mas sencilla para solucionar el problema es utilizando la función scanf con el especificador de formato " %c", de esta forma:
puts("Escribe una frase:");
gets(cadena);

puts("Caracter para cambiar:");
scanf(" %c", &cambiar);

puts("Caracter sustituto:");
scanf(" %c", &sustituir);

Con ello primero se descarta el espacio blanco (en este caso el '\n' de la linea anterior) y solo entonces se lee el carácter.

Y por supuesto se debe eliminar el uso de gets.

Un saludo