Autor
|
Tema: problema de cadenas en c (Leído 3,934 veces)
|
fernaEDLP
Desconectado
Mensajes: 48
|
hola que tal? tengo un problema en c que dice lo siguiente: cree dos cadenas cad1 y cad2 que puedan alamacenar hasta 80 caracteres, y cad1 se pueda inicializar por teclado, copie el contenido den cad1 en cad2 sin que copie el contenido de las vocales, aclaración: no se pueden usar funciones,no c porque mo código no funciona, yo hice lo siguiente: int main() { int i,j; char cad1[80]; char cad2[80]; gets(cad1); while(cad1 !='\0') { i++; }
for(j=0;j<=i;j++) { if(cad1[j]=='a') (estoy probando con una sola vocal,ya se que van las otras) { cad1[j]=' '; } } for(j=0;j<=i;j++) { if(cad1[j]!=' ') { cad2[j]=cad1[j]; } }
puts(cad2);
return 0; }
pd: no entiendo porque un estudiante de ingeneiría industrial tiene que estudiar c
|
|
« Última modificación: 11 Mayo 2018, 06:13 am por fernaEDLP »
|
En línea
|
|
|
|
Kenji-chan
Desconectado
Mensajes: 104
|
int main(){ int i,j; char cad1[80]; char cad2[80]; while(cad1!='\0'){ /*este bucle while se seguira ejecutando mientras cad1 sea distinto que '\0'*/ i++;//->aqui incrementamos el valor de i en 1 y dado que i nunca fue inicializado no sabemos cual es su valor inicial }//->cad1 nunca fue modificado asi que siempre sera distinto que '\0' y se repetira indefinidamente for(j=0;j<=i;j++){ if(cad1[j]=='a') /*(estoy probando con una sola vocal,ya se que van las otras)*/{ cad1[j]=' '; } } for(j=0;j<=i;j++){ if(cad1[j]!=' '){ cad2[j]=cad1[j]; } } return 0; }
|
|
|
En línea
|
|
|
|
fernaEDLP
Desconectado
Mensajes: 48
|
int main() { int i=0,j; char cad1[80]; char cad2[80]; gets(cad1); while(cad1!='\0') { i++; } for(j=0;j<=i;j++) { if(cad1[j]=='a') { cad1[j]=' '; } } for(j=0;j<=i;j++) { if(cad1[j]!=' ') { cad2[j]=cad1[j]; } } puts(cad2); return 0; } hola kenji gracias por responder, pero lo acabo de modificar y me sigue sin funcar en el codeblocks, es decir cuando meto la palabra la muestra en pantalla y no ocurre nada el el programa queda estatico. pd:hoy rendí y creo queme rompieron el traste
|
|
|
En línea
|
|
|
|
Kenji-chan
Desconectado
Mensajes: 104
|
while(cad1!='\0'){ i++; }
esta parte del código hace que tu programa quede estático eso es porque dentro del bucle while nunca cambias la posición de cad1 lo que tienes que hacer es while(cad1[i]!='\0'){ i++; }
con esto le dices que la posiciona de cad1 avance y no se quede estático
|
|
« Última modificación: 11 Mayo 2018, 20:39 pm por Kenji-chan »
|
En línea
|
|
|
|
fernaEDLP
Desconectado
Mensajes: 48
|
int main() { int i=0,j; char cad1[80]; char cad2[80]; gets(cad1); while(cad1!='\0') { i++; }
for(j=0;j<=i;j++) { if(cad1[j]=='a') { cad1[j]=' '; } }
for(j=0;j<=i;j++) { if(cad1[j]!=' ') { cad2[j]=cad1[j]; } }
puts(cad2);
return 0; }
tenes razón pero ahora pasa lo siguiente: cuando pongo por ejemplo hola me imprime hol, hasta ahi va todo bien si pongo armario me pone prm ?¿, si pongo grande me devuelve gr4nde es como si evaluara la vocal pero de mala manera, que opinas de la lógica de mi código es buena o es mala? tal vez el problema esta ahí gracias de nuevo, estoy editando el comentario pero sigue sin aparecer el
|
|
« Última modificación: 11 Mayo 2018, 20:48 pm por fernaEDLP »
|
En línea
|
|
|
|
Kenji-chan
Desconectado
Mensajes: 104
|
he encontrado 2 problemas aqui for(j=0;j<=i;j++){/*-> a qui en j<=i, hola tiene 4 caracteres y es lo que vale i despues de salir del while, y cad1 tine 4 indices empezando desde 0 por lo tano cad1[0], cad1[1], cad1[2], cad1[3] son cuatro pero si le decimos que sea igual a cuatro nos incrementa en uno el indice cad1[4] que nos da un total de 5*/ if(cad1[j]=='a'){ cad1[j]=' '; } } for(j=0;j<=i;j++){//> lo mismo aqui if(cad1[j]!=' '){ cad2[j]=cad1[j]; /*aqui el string cad2[j] es sustituido por cad1[j], pero nunca pone el '\0'*/ } }
|
|
|
En línea
|
|
|
|
fernaEDLP
Desconectado
Mensajes: 48
|
he encontrado 2 problemas aqui for(j=0;j<=i;j++){/*-> a qui en j<=i, hola tiene 4 caracteres y es lo que vale i despues de salir del while, y cad1 tine 4 indices empezando desde 0 por lo tano cad1[0], cad1[1], cad1[2], cad1[3] son cuatro pero si le decimos que sea igual a cuatro nos incrementa en uno el indice cad1[4] que nos da un total de 5*/ if(cad1[j]=='a'){ cad1[j]=' '; } } for(j=0;j<=i;j++){//> lo mismo aqui if(cad1[j]!=' '){ cad2[j]=cad1[j]; /*aqui el string cad2[j] es sustituido por cad1[j], pero nunca pone el '\0'*/ } }
entendí las 2 primeras correciones pero la del '\0' no la entendí, no se supone que cuando recorro desde j=0 hasta j<i estaría recorriendo hasta el final de la cadena?, o el '\0' sirve también como un break? perdon por mi lentitud estoy hecho percha necesito una siesta
|
|
« Última modificación: 11 Mayo 2018, 21:21 pm por fernaEDLP »
|
En línea
|
|
|
|
Kenji-chan
Desconectado
Mensajes: 104
|
si funciona de forma cimilar ademas se me olvidabaotra cosa for(j=0;j<=i;j++){ if(cad1[j]!=' '){ cad2[j]=cad1[j]; /*a qui la la escritura del cad2 no es correcta*/ } }
ejemplo con 'armario' en cad1 todas las 'a' son ' '(espacio en blanco) por lo tanto cad2[j] -> 0 -> no pones nada y se queda con lo que ya avía hai cad2[j] -> 1 -> r cad2[j] -> 2 -> m cad2[j] -> 3 -> nada cad2[j] -> 4 -> r cad2[j] -> 5 -> i cad2[j] -> 6 -> o cad2[j] -> 7 -> '\0' esto tendia que ir al final
|
|
|
En línea
|
|
|
|
fernaEDLP
Desconectado
Mensajes: 48
|
int main() { int i=0,j,k,l=0; char cad1[80]; char cad2[80]; gets(cad1); while(cad1!='\0') { i++; }
for(j=0;j<i;j++) { if(cad1[j]=='a'||cad1[j]=='e'||cad1[j]=='i'||cad1[j]=='o'||cad1[j]=='u'||cad1[j]=='A'||cad1[j]=='E'||cad1[j]=='O'||cad1[j]=='U'||cad1[j]=='I') { cad1[j]=' '; } } for(k=0;cad1[k];k++) { cad2[l]=cad1[k]; l++; cad2[l]='\0';
}
puts(cad2);
return 0; } hola kenji gracias por la ayuda ya lo pude resolver, te hago una última pregunta el hecho de poner cad2[l]='\0'; implica que eso se va a agregar al final de la copia de cad1 en cad 2?
|
|
|
En línea
|
|
|
|
Kenji-chan
Desconectado
Mensajes: 104
|
si ya lo tienes solo te hace falta algo int main(){ int i=0,j,k,l=0; char cad1[80]; char cad2[80]; while(cad1!='\0'){ i++; } for(j=0;j<i;j++){ if(cad1[j]=='a'||cad1[j]=='e'||cad1[j]=='i'||cad1[j]=='o'||cad1[j]=='u'||cad1[j]=='A'||cad1[j]=='E'||cad1[j]=='O'||cad1[j]=='U'||cad1[j]=='I'){ cad1[j]=' ';//-> a qui haces que cad1[j] sea igual a ' '(espacio en blanco) } } for(k=0;cad1[k];k++){ /*aqui te hace falta quitar los espacios en blancos que dejaste en cad1 con un if != ' ' bastara para eso*/ cad2[l]=cad1[k]; l++; cad2[l]='\0'; } return 0; }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con comparación de cadenas
Java
|
Debci
|
6
|
5,456
|
25 Agosto 2009, 21:46 pm
por juancho77
|
|
|
Problema al concatenar cadenas
PHP
|
Feedeex
|
4
|
4,568
|
13 Mayo 2011, 12:49 pm
por Feedeex
|
|
|
Problema con cadenas
Programación C/C++
|
Uknow
|
2
|
2,095
|
11 Diciembre 2011, 23:37 pm
por Uknow
|
|
|
Problema cadenas
Programación C/C++
|
muymuyperdido
|
6
|
2,503
|
8 Enero 2013, 15:48 pm
por leosansan
|
|
|
[C] Problema con cadenas
Programación C/C++
|
alvr
|
1
|
1,487
|
9 Enero 2013, 21:41 pm
por durasno
|
|