Test Foro de elhacker.net SMF 2.1

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:


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
Cita de: n_n en 30 Octubre 2011, 02:04 AMesto 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
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 (cpp) [Seleccionar]
if(.......)
{
     w++;
     cad[x]=w;
}

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:
x = 0;
w = 0;
while (cad[x] != '\0'){
  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'
  )
     printf("%d", ++w);
  else
     putchar(cad[x]);
 
  x++;
}
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 (cpp) [Seleccionar]
int x = 0;
int w = 0;

char vocales[] = { 'A', 'E', 'I', 'O', 'U' };

while (cad[x] != '\0')
{
  for (int i = 0; i < 5; ++i)
  {
     if (toupper(cad[x]) == vocales[i])
     {
       printf("%d", ++w);
       break;
     }
  }
  if (i == 5) putchar(cad[x]);

  x++;
}
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:
char cad[] = "Esta solo es una cadena de prueba";
int i;
int j;

j = 0;
for (i = 0; cad[i] != '\0'; i++)
   if (strchr("AEIOUaeiou", cad[i]) == NULL)
      putchar(cad[i]);
   else
      printf("%d", ++j);
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 (cpp) [Seleccionar]
int counter = 0;
char ch = 0;

while ( (ch = getchar()) != '\n')
{
if (strchr("AEIOU", toupper(ch)) != NULL)
  ch = (++counter) + '0';

putchar(ch);
}
Título: Re: Cambiar caracteres en cadenas --en C--
Publicado por: rir3760 en 2 Noviembre 2011, 01:27 AM
Cita de: LearningSpanishProgrammer en  1 Noviembre 2011, 20:35 PMif (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