Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: n_n en 30 Octubre 2011, 02:04 am



Título: Cambiar caracteres en cadenas --en C--
Publicado por: n_n en 30 Octubre 2011, 02:04 am
hola a todos, quisiera que me ayudaran!
Llevo mucho haciendo esto y no me salen lo he borrado miles de veces!
necesito hacer un programa el cual te lea una cadena y cambie todas las vocales por los numeros del 1 al 9 consecutivamente.

Ejemplo:
Introduces "Foro de elhacker"
y te devuelve: "F1r2 d3 4lh5ck6r"

Se los agradeceria muchisimo!!

GRACIAS!!:D



se me ocurre algo como esto:

Código:
 
x=0;
              w=0;
              printf ("Cadena\n");
              fflush(stdin);
              scanf ("%s", cad);
              while(cad[x] != '\x0')
                        {
                                          if (cad[x]=='a' || cad[x]=='A' || cad[x]=='e' || cad[x]=='E' || cad[x]=='i' || cad[x]=='I' || cad[x]=='o' || cad[x]=='O' || cad[x]=='u' || cad[x]=='U')
                                          {
                                                         w++;
                                          }
                                          x++;
                        }


esto identificaria las vocales y en que posicion estan pero nose como hacer para enumerarlas :S


Título: Re: Cambiar caracteres en cadenas --en C--
Publicado por: rir3760 en 30 Octubre 2011, 03:43 am
esto identificaria las vocales y en que posicion estan pero nose como hacer para enumerarlas
Pues ya lo estas haciendo. Basta con imprimir el valor de la variable "w" justo despues de su incremento.

Un saludo


Título: Re: Cambiar caracteres en cadenas --en C--
Publicado por: n_n en 30 Octubre 2011, 04:45 am
Gracias

Pero al poner un
Código:
printf ("%i", w);
aparecerian solo los numeros de las vocales y no dentro de la cadena.

Me explico?


Título: Re: Cambiar caracteres en cadenas --en C--
Publicado por: alx128 en 30 Octubre 2011, 09:13 am
Ya estas incrementando el valor por cada vocal....Solo te falta igualar el valor de w en la posicion de cada vocal...O sea ahi si enumeras bien w en cada vocal pero no almacenas el numero en la posicion de la vocal algo asi: cadena en la psicion x=w...
Código
  1. if(.......)
  2. {
  3.      w++;
  4.      cad[x]=w;
  5. }
Y despues imprimes toda la cadena afuera del while...


Título: Re: Cambiar caracteres en cadenas --en C--
Publicado por: rir3760 en 30 Octubre 2011, 17:18 pm
No es necesario almacenar los caracteres ni el contador ya que lo unico que se hace con ellos es imprimirlos. Tomando tu ejemplo:
Código
  1. x = 0;
  2. w = 0;
  3. while (cad[x] != '\0'){
  4.   if (cad[x] == 'a' || cad[x] == 'A' || cad[x] == 'e' || cad[x] == 'E'
  5.      || cad[x] == 'i' || cad[x] == 'I' || cad[x] == 'o' ||
  6.      cad[x] == 'O' || cad[x] == 'u' || cad[x] == 'U'
  7.   )
  8.      printf("%d", ++w);
  9.   else
  10.      putchar(cad[x]);
  11.  
  12.   x++;
  13. }
  14. putchar('\n');

Edito: no puede utilizarse la función "putchar" para imprimir el numero de vocales, hay que utilizar printf. Mea culpa. Ya esta corregido

Un saludo


Título: Re: Cambiar caracteres en cadenas --en C--
Publicado por: n_n en 31 Octubre 2011, 17:41 pm
Muchas gracias!!

me sirvio de mucho su ayuda :)


Título: Re: Cambiar caracteres en cadenas --en C--
Publicado por: LearningSpanishProgrammer en 1 Noviembre 2011, 00:54 am
Creo ser más claro así:

Código
  1. int x = 0;
  2. int w = 0;
  3.  
  4. char vocales[] = { 'A', 'E', 'I', 'O', 'U' };
  5.  
  6. while (cad[x] != '\0')
  7. {
  8.   for (int i = 0; i < 5; ++i)
  9.   {
  10.      if (toupper(cad[x]) == vocales[i])
  11.      {
  12.        printf("%d", ++w);
  13.        break;
  14.      }
  15.   }
  16.   if (i == 5) putchar(cad[x]);
  17.  
  18.   x++;
  19. }
  20. putchar('\n');


Título: Re: Cambiar caracteres en cadenas --en C--
Publicado por: rir3760 en 1 Noviembre 2011, 02:47 am
Otra opcion es utilizando la funcion "strchr" (prototipo en <string.h>) para conocer si el caracter es vocal:
Código
  1. char cad[] = "Esta solo es una cadena de prueba";
  2. int i;
  3. int j;
  4.  
  5. j = 0;
  6. for (i = 0; cad[i] != '\0'; i++)
  7.   if (strchr("AEIOUaeiou", cad[i]) == NULL)
  8.      putchar(cad[i]);
  9.   else
  10.      printf("%d", ++j);
  11. putchar('\n');

Un saludo


Título: Re: Cambiar caracteres en cadenas --en C--
Publicado por: LearningSpanishProgrammer en 1 Noviembre 2011, 20:35 pm
También puedes hacer lo siguiente:

Código
  1. int counter = 0;
  2. char ch = 0;
  3.  
  4. while ( (ch = getchar()) != '\n')
  5. {
  6. if (strchr("AEIOU", toupper(ch)) != NULL)
  7.  ch = (++counter) + '0';
  8.  
  9. putchar(ch);
  10. }


Título: Re: Cambiar caracteres en cadenas --en C--
Publicado por: rir3760 en 2 Noviembre 2011, 01:27 am
if (strchr("AEIOU", toupper(ch)) != NULL)
   ch = (++counter) + '0';
Esa fue mi primera aproximación pero falla si hay mas de nueve vocales en la cadena.

Un saludo