Autor
|
Tema: Help! Programa para sustituir un carácter en C (Leído 17,318 veces)
|
sora_ori
Desconectado
Mensajes: 269
|
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: #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 printf("\nCaracter para cambiar: "); //obtener caracter a buscar para remplazar printf("\nCaracter sustituto: "); //caracter sustituto 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("%s",cadena ); //muestra en pantalla la nueva cadena return 0; }
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Tienes que limpiar el buffer de entrada o bien usar sscanf junto a fgets: char linea[10]; fgets(linea , sizeof(linea ), stdin );
|
|
|
En línea
|
|
|
|
xassiz~
|
Aparte de lo del buffer, se te coló un igual de más aquí: cadena[i]==sustituir;
|
|
|
En línea
|
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
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 printf("\nCaracter sustituto: "); //caracter sustituto
|
|
|
En línea
|
|
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
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
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Si lo hago de esa forma no me pide por pantalla el caracter para sustituir.
Pues de esta otra sí:#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!.
|
|
|
En línea
|
|
|
|
xassiz~
|
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!
|
|
|
En línea
|
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
Muchas gracias por la ayuda!!
Perfecto y comprendido
Un saludo
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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:"); puts("Caracter para 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
|
|
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como puedo hacer un programa para que lea un .txt desde un caracter hasta otro?
Programación Visual Basic
|
El_Marine
|
1
|
2,205
|
29 Septiembre 2006, 13:14 pm
por WarGhost
|
|
|
El PLC evoluciona para sustituir al WiFi dentro del hogar
Noticias
|
wolfbcn
|
5
|
4,515
|
26 Diciembre 2011, 06:41 am
por Randomize
|
|
|
DUDA impresion caracter a caracter con retardo (C)
Programación C/C++
|
el_nene_kpy
|
8
|
14,735
|
5 Febrero 2012, 03:43 am
por Xandrete
|
|
|
como hacer una lectura de una palabra caracter a caracter???
« 1 2 3 »
Programación C/C++
|
asdavid
|
21
|
13,553
|
5 Noviembre 2012, 20:21 pm
por cypascal
|
|
|
Nuevo programa informático permite sustituir al jefe por un ordenador
Noticias
|
wolfbcn
|
0
|
1,666
|
14 Diciembre 2012, 01:39 am
por wolfbcn
|
|