elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Help! Programa para sustituir un carácter en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Help! Programa para sustituir un carácter en C  (Leído 17,263 veces)
sora_ori

Desconectado Desconectado

Mensajes: 269



Ver Perfil
Help! Programa para sustituir un carácter en C
« 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:




Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4.  
  5. void main(){
  6.  
  7.  
  8. char cadena[100];
  9. char cambiar;
  10. char sustituir;
  11. int i;
  12.  
  13. printf("Escribe una frase: "); //obtiene la cadena
  14. gets(cadena);
  15. printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar
  16. scanf("%c",&cambiar);
  17. printf("\nCaracter sustituto: "); //caracter sustituto
  18. scanf("%c",&sustituir);
  19.  
  20. for (i=0;i<=strlen(cadena)-1;i++){ //recorremos la cadena
  21.    if (cadena[i]==cambiar){ //compara
  22.       cadena[i]==sustituir; //cambia el valor si lo encuentra
  23.       } //end if
  24.       } //end for
  25.  
  26.    printf("\n");
  27.    printf("%s",cadena); //muestra en pantalla la nueva cadena
  28.    printf("\n");
  29.  
  30.  system("pause");
  31.  return 0;
  32. }


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Help! Programa para sustituir un carácter en C
« Respuesta #1 en: 6 Febrero 2013, 21:11 pm »

Tienes que limpiar el buffer de entrada o bien usar sscanf junto a fgets:

Código
  1. char linea[10];
  2. fgets(linea, sizeof(linea), stdin);
  3. sscanf(linea, "%d",&cambiar);


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: Help! Programa para sustituir un carácter en C
« Respuesta #2 en: 6 Febrero 2013, 21:12 pm »

Aparte de lo del buffer, se te coló un igual de más aquí:
Código
  1.       cadena[i]==sustituir;
En línea

sora_ori

Desconectado Desconectado

Mensajes: 269



Ver Perfil
Re: Help! Programa para sustituir un carácter en C
« Respuesta #3 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í:


Código
  1. printf("Escribe una frase: "); //obtiene la cadena
  2. fgets(cadena, sizeof(cadena), stdin);
  3. sscanf(cadena, "%d",&cambiar);
  4. printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar
  5. scanf("%c",&cambiar);
  6. printf("\nCaracter sustituto: "); //caracter sustituto
  7. scanf("%c",&sustituir);
En línea

xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: Help! Programa para sustituir un carácter en C
« Respuesta #4 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.

Saludos!
En línea

sora_ori

Desconectado Desconectado

Mensajes: 269



Ver Perfil
Re: Help! Programa para sustituir un carácter en C
« Respuesta #5 en: 6 Febrero 2013, 21:33 pm »

Si lo hago de esa forma no me pide por pantalla el caracter para sustituir.


Código
  1. printf("Escribe una frase: "); //obtiene la cadena
  2. fgets(cadena, sizeof(cadena), stdin);
  3. printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar
  4. sscanf(cadena, "%d",&cambiar);
  5. printf("\nCaracter sustituto: "); //caracter sustituto
  6. scanf("%c",&sustituir);

En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Help! Programa para sustituir un carácter en C
« Respuesta #6 en: 6 Febrero 2013, 23:02 pm »

Si lo hago de esa forma no me pide por pantalla el caracter para sustituir.
Pues de esta otra sí:
Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. char cadena[100];
  5. char cambiar;
  6. char sustituir;
  7. int i;
  8. printf("Escribe una frase: "); //obtiene la cadena
  9. gets(cadena);
  10. printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar
  11. scanf("%c",&cambiar);
  12. while (getchar ()!='\n');
  13. printf("\nCaracter sustituto: "); //caracter sustituto
  14. scanf("%c",&sustituir);
  15. for (i=0;cadena[i]!='\0';i++){ //recorremos la cadena
  16.    if (cadena[i]==cambiar){ //compara
  17.        cadena[i]=sustituir; //cambia el valor si lo encuentra
  18.    }
  19.    //end if
  20. } //end for
  21.    printf("\n");
  22.    printf("%s",cadena); //muestra en pantalla la nueva cadena
  23.    printf("\n");
  24.  system("pause");
  25.  return 0;
  26. }
  27.  
Saluditos!.
En línea

xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: Help! Programa para sustituir un carácter en C
« Respuesta #7 en: 6 Febrero 2013, 23:18 pm »

Si lo hago de esa forma no me pide por pantalla el caracter para sustituir.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(){
  5. int i;
  6. char buffer[100], cadena[100], cambiar, sustituir;
  7.  
  8. printf("Escribe una frase: "); //obtiene la cadena
  9. fgets(buffer,sizeof(buffer),stdin);
  10. sscanf(buffer, "%s", &cadena);
  11.  
  12. printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar
  13. fgets(buffer,sizeof(buffer),stdin);
  14. sscanf(buffer, "%c", &cambiar);
  15.  
  16. printf("\nCaracter sustituto: "); //caracter sustituto
  17. fgets(buffer,sizeof(buffer),stdin);
  18. sscanf(buffer, "%c", &sustituir);
  19.  
  20. for (i=0;i<=strlen(cadena)-1;i++){ //recorremos la cadena
  21. if (cadena[i]==cambiar)
  22. cadena[i]=sustituir;
  23. }
  24.  
  25. printf("\n%s\n",cadena); //muestra en pantalla la nueva cadena
  26.  
  27. return 0;
  28. }

Saludos!
En línea

sora_ori

Desconectado Desconectado

Mensajes: 269



Ver Perfil
Re: Help! Programa para sustituir un carácter en C
« Respuesta #8 en: 6 Febrero 2013, 23:20 pm »

Muchas gracias por la ayuda!!

Perfecto y comprendido


Un saludo
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Help! Programa para sustituir un carácter en C
« Respuesta #9 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:
Código
  1. puts("Escribe una frase:");
  2. gets(cadena);
  3.  
  4. puts("Caracter para cambiar:");
  5. scanf(" %c", &cambiar);
  6.  
  7. puts("Caracter sustituto:");
  8. 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
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines