Cambiar caracteres en cadenas --en C--

Iniciado por n_n, 30 Octubre 2011, 02:04 AM

0 Miembros y 2 Visitantes están viendo este tema.

n_n

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

rir3760

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
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

n_n

Gracias

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

Me explico?

alx128

#3
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...

rir3760

#4
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
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

n_n

Muchas gracias!!

me sirvio de mucho su ayuda :)

LearningSpanishProgrammer

#6
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');
Estoy aprendiendo español, y tu estas aprendiendo programación

rir3760

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
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

LearningSpanishProgrammer

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);
}
Estoy aprendiendo español, y tu estas aprendiendo programación

rir3760

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
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