Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: palacio29 en 24 Noviembre 2016, 00:42 am



Título: Algo simple de arreglos que no me sale (Si, soy re newbie)
Publicado por: palacio29 en 24 Noviembre 2016, 00:42 am
Hola

Tengo que hacer un ejercicio en el cual el usuario ingrese un texto, el texto se va a guardar en un arreglo de tipo char. Lo que tengo que hacer es quitar del arreglo aquellos caracteres que sean la letra "o".
Lo tengo que hacer de manera que si yo ingreso la frase "Hola Mundo"...Tiene que quedar
"Hla Mund".
Es decir, me va a quedar un arreglo mas chico..
Es importante destacar que NO PUEDO USAR ARREGLOS AUXILIARES.

Si fuera con auxiliares es muy sencillo. Lo estoy intentando hacer haciendo que cuando encuentre una letra "o",se mueva todo el arreglo una posicion hacia la izquierda, pero no logre hacerlo. Les dejo mi codigo haber si me pueden ayudar plz.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    char texto[500];
  7.    int i=0,j=0;
  8.    printf("Ingrese el texto:");
  9.    gets(texto);
  10.    printf("\nLo ingresado es %s",texto);
  11.    while(texto[i]!='\0')
  12.    {
  13.        if(texto[i]=='o')
  14.        {
  15.                if(texto[i+1]!='\0')
  16.                {
  17.                    while(texto[j]!='\0')
  18.                    {
  19.                        if(texto[j]!='\0')
  20.                        {
  21.                            texto[j]=texto[j+1];
  22.                        }
  23.                        else
  24.                        {
  25.                            texto[j]='\0';
  26.                        }
  27.                        j++;
  28.                    }
  29.                    texto[j]='\0';
  30.                }
  31.                else
  32.                {
  33.                    texto[i]='\0';
  34.                }
  35.                j=0;
  36.  
  37.  
  38.        }
  39.  
  40.            i++;
  41.  
  42.    }
  43.    printf("\nLo ingresado modificado es\n %s",texto);
  44.    return 0;
  45. }
  46.  

Lo pense en el momento, pero si ustedes tienen una mejor logica de hacer esto mejor, porque lo mio son muchas lineas y medio complicado.


Título: Re: Algo simple de arreglos que no me sale (Si, soy re newbie)
Publicado por: Kenji-chan en 24 Noviembre 2016, 01:26 am
con la sentencia "continue;" y 2 contadores lo puedes hacer facil


Título: Re: Algo simple de arreglos que no me sale (Si, soy re newbie)
Publicado por: Tx10 en 25 Noviembre 2016, 14:06 pm
Hola, lo que puedes hacer es ir recorriendo el array y en cuanto te encuentres una 'o'  buscar la siguiente letra que no sea una 'o' y intercanbiarlas de posicion en el array. Te dejo el código:

Código:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char texto[500];
    int i=0,j=0;
    printf("Ingrese el texto:");
    gets(texto);
    printf("\nLo ingresado es %s",texto);

    while(texto[i]!='\0')
    {
        if(texto[i]=='o'){
            j=i;
            while(texto[j]=='o'){
                j++;
            }
            texto[i]=texto[j];
            texto[j]='o';
        }
        i++;

    }
    printf("\nLo ingresado modificado es\n %s",texto);
    return 0;
}


Mucho animo !!!

p.d.: lo editado es el editor de código y la explicacion


Título: Re: Algo simple de arreglos que no me sale (Si, soy re newbie)
Publicado por: Slava_TZD en 25 Noviembre 2016, 17:16 pm
Código
  1. ...
  2.    int l = strlen(texto);
  3.    for(i=0;i<l;i++) {
  4.        //Si es una 'o' mueve el array una posición a la izquierda
  5.        if(texto[i] == 'o') {
  6.            for(j=i;j<l-1;j++) {
  7.                texto[j] = texto[j+1];
  8.            }
  9.            //se actualiza la longitud y el final de la cadena
  10.            l--;
  11.            texto[l] = '\0';
  12.            i--;
  13.        }
  14.    }
  15. ...