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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema de cadenas en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: problema de cadenas en c  (Leído 3,919 veces)
fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: problema de cadenas en c
« Respuesta #10 en: 12 Mayo 2018, 10:18 am »

hola no lo decidí dejar asi como está, porque si pongo el if con cad[j}!=' ' ocurre que si el usuario me digita una frase con espacios por ejemplo "hola que tal", el programa me devuelve hlqtl, y no entendería que es lo que hace, en cambio si directamente copio el contenido de cad1 en cad2 me devuelve hl q tl, quedaria más claro así


En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: problema de cadenas en c
« Respuesta #11 en: 12 Mayo 2018, 19:08 pm »

si pero dejar así el programa es muy poco elegante ya que la longitud del estring cad2 se ve reducida por 80-(n_vocales) alterando su tamaño original paa esto te propongo 2 soluciones, la primero usar un carácter que se use poco o no se use en una oración como por ejemplo un '*' de modo que
Código
  1. int main(){
  2.    int i=0,j,k,l=0;
  3.    char cad1[80];
  4.    char cad2[80];
  5.    gets(cad1);
  6.    while(cad1!='\0'){
  7.        i++;
  8.    }
  9.  
  10.        for(j=0;j<i;j++){
  11.            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'){
  12.                cad1[j]='*';//-> a qui haces que cad1[j] sea igual a '*'
  13.            }
  14.        }
  15.        for(k=0;cad1[k];k++){
  16.            if(cad1[k] != '*'){
  17.                cad2[l]=cad1[k];
  18.                l++;
  19.                cad2[l]='\0';
  20.            }
  21.        }
  22.  
  23.        puts(cad2);
  24.  
  25.  
  26.  
  27. return 0;
  28. }
  29.  

la segundo consiste en cambiar un poco la filosofía del programa

quita_vocales.c
Código
  1. #include <stdio.h>
  2.  
  3. int main(int arv, char* argc[]){
  4. int i = 0, j = 0;
  5. char cad1[80], cad2[80];
  6.  
  7. gets(cad1);
  8.  
  9. while(cad1[i] != '\0'){
  10. if(cad1[i] == 'a' || cad1[i] == 'A' ||
  11.   cad1[i] == 'e' || cad1[i] == 'E' ||
  12.   cad1[i] == 'i' || cad1[i] == 'I' ||
  13.   cad1[i] == 'o' || cad1[i] == 'O' ||
  14.   cad1[i] == 'u' || cad1[i] == 'U'){
  15. i++;
  16. continue;
  17. /*mientras sea una vocal pasamos de ella*/
  18. }
  19. else{
  20. cad2[j] = cad1[i];
  21. j++;
  22. cad2[j] = '\0';
  23. /*si no es una vocal la almacenamos en cad2*/
  24. }
  25. i++;
  26. }
  27.  
  28. puts(cad2);
  29.  
  30. return 0;
  31. }
  32.  

aquí como veras envés de sacar la longitud del estring cad1 sacamos las vocales minetras escaneamos el string cad1

la sentencia continue
Citar
Fuerza a que comience una nueva vuelta dentro de la estructura correspondiente. Dentro de los ciclos
while, y do-while, se evalúa la condición de salida; en el for, se efectúa un salto a la expresión de incremento.
 Se utiliza para saltarse el resto de la pasada actual a través de un bucle. El bucle no termina cuando se encuentra una sentencia continue, sencillamente no se ejecutan las sentencias que se encuentren a continuación en él, y se salta directamente a la siguiente pasada a través del bucle.


En línea

fernaEDLP

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: problema de cadenas en c
« Respuesta #12 en: 13 Mayo 2018, 01:25 am »

si pero dejar así el programa es muy poco elegante ya que la longitud del estring cad2 se ve reducida por 80-(n_vocales) alterando su tamaño original paa esto te propongo 2 soluciones, la primero usar un carácter que se use poco o no se use en una oración como por ejemplo un '*' de modo que
Código
  1. int main(){
  2.    int i=0,j,k,l=0;
  3.    char cad1[80];
  4.    char cad2[80];
  5.    gets(cad1);
  6.    while(cad1!='\0'){
  7.        i++;
  8.    }
  9.  
  10.        for(j=0;j<i;j++){
  11.            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'){
  12.                cad1[j]='*';//-> a qui haces que cad1[j] sea igual a '*'
  13.            }
  14.        }
  15.        for(k=0;cad1[k];k++){
  16.            if(cad1[k] != '*'){
  17.                cad2[l]=cad1[k];
  18.                l++;
  19.                cad2[l]='\0';
  20.            }
  21.        }
  22.  
  23.        puts(cad2);
  24.  
  25.  
  26.  
  27. return 0;
  28. }
  29.  

la segundo consiste en cambiar un poco la filosofía del programa

quita_vocales.c
Código
  1. #include <stdio.h>
  2.  
  3. int main(int arv, char* argc[]){
  4. int i = 0, j = 0;
  5. char cad1[80], cad2[80];
  6.  
  7. gets(cad1);
  8.  
  9. while(cad1[i] != '\0'){
  10. if(cad1[i] == 'a' || cad1[i] == 'A' ||
  11.   cad1[i] == 'e' || cad1[i] == 'E' ||
  12.   cad1[i] == 'i' || cad1[i] == 'I' ||
  13.   cad1[i] == 'o' || cad1[i] == 'O' ||
  14.   cad1[i] == 'u' || cad1[i] == 'U'){
  15. i++;
  16. continue;
  17. /*mientras sea una vocal pasamos de ella*/
  18. }
  19. else{
  20. cad2[j] = cad1[i];
  21. j++;
  22. cad2[j] = '\0';
  23. /*si no es una vocal la almacenamos en cad2*/
  24. }
  25. i++;
  26. }
  27.  
  28. puts(cad2);
  29.  
  30. return 0;
  31. }
  32.  

aquí como veras envés de sacar la longitud del estring cad1 sacamos las vocales minetras escaneamos el string cad1

la sentencia continue
hola muy buena la segunda solución, no sabía de la sentencia continue, en la facu en el primer modulo no se dan funciones, es todo con diagrama de flujo punteros, arreglos y cadenas. En el segundo si damos todo lo que es memoria dinámica, funciones y demas...
pero creo que voy a tener que rendir de nuevo la primer parte  :( gracias igual seguramente en el futuro postee mas dudas
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con comparación de cadenas
Java
Debci 6 5,451 Último mensaje 25 Agosto 2009, 21:46 pm
por juancho77
Problema al concatenar cadenas
PHP
Feedeex 4 4,565 Último mensaje 13 Mayo 2011, 12:49 pm
por Feedeex
Problema con cadenas
Programación C/C++
Uknow 2 2,094 Último mensaje 11 Diciembre 2011, 23:37 pm
por Uknow
Problema cadenas
Programación C/C++
muymuyperdido 6 2,500 Último mensaje 8 Enero 2013, 15:48 pm
por leosansan
[C] Problema con cadenas
Programación C/C++
alvr 1 1,484 Último mensaje 9 Enero 2013, 21:41 pm
por durasno
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines