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

 

 


Tema destacado: Curso de javascript por TickTack


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
41  Programación / Programación C/C++ / Re: Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) en: 6 Agosto 2014, 20:58 pm
Otra forma, usando la función strchr:

Editado:

Código
  1. char s1[] = " 1234 789  1234 321   9876 5678 ";
  2.  
  3. for( i = 0, j = 0; s1[ i ] != '\0'; i++, j++ )
  4. {
  5.     if( strchr( " \0", s1[i + 1] ) && j == 3 )
  6.     {
  7.        for( j = i - 3; j <= i; j++ )
  8.             s1[ j ] = '*';
  9.        cant++, j = 0;
  10.     }
  11.     s1[i + 1] == ' ' ? (j = -2) : ( s1[ i ] == ' ' && i == 0 )
  12.     ? (j = -1) : (j = j);
  13. }
  14. printf("\n Cadena reemplazada.: %s\n", s1);
  15. printf("\n Se han sustituido un total de %d palabras.\n\n", cant);
  16.  

Saludos
42  Programación / Programación C/C++ / Re: Devolver cadena con función en: 5 Agosto 2014, 23:19 pm
El programa no muestra el nombre en el prinf que puede fallar? Gracias.

La razón es que nombre es una variable local de la función creanombre  al terminar la ejecución de la mencionada función la dirección que ocupaba la variable en ella es liberada y por tanto el valor que se había almacenado en ella se pierde.

Saludos
43  Programación / Programación C/C++ / Re: Espacios en concatenación strcat. en: 5 Agosto 2014, 18:45 pm
ten por seguro que la implementación de la librería estándar es, en el peor de los casos, igual de eficiente que la tuya... lo lógico es que esa versión tienda a ser más eficiente que la tuya. Y aunque esta no fuese razón suficiente, piensa que la librería estándar va a tener muchos menos errores de código que tu versión... además que te evitas tener que mantener ese código.

Dudo que la versión estándar sea tan diferente, es mas apostaría que es igual a:

Código
  1. char *strcat(char *s, const char *cad)
  2. {
  3.    char * save = s;
  4.    for (; *s; ++s);
  5.    while ((*s++ = *cad++) != '\0');
  6.  
  7.    return (save);
  8. }

Y la verdad no sé que la hace tan "eficiente" ya que ni siquiera realiza la validación
pertinente para asegurar que la cadena destino sea lo suficientemente grande para
luego concatenarle la cadena indicada.

Saludos
44  Programación / Programación C/C++ / Re: Espacios en concatenación strcat. en: 5 Agosto 2014, 17:25 pm
Eres consciente que tu ejemplo escribe fuera del buffer, no?? ... o perdón, hablando con propiedad... provoca buffer overflow.

Uff es que lo estaba probando y olvide ponerle el tamaño actual gracias por la observación

Saludos
45  Programación / Programación C/C++ / Re: Espacios en concatenación strcat. en: 5 Agosto 2014, 16:55 pm
O podrías implementar tu propia versión de strcat así para ajustarlo a tus necesidades y evitar tantas llamadas de la versión estándar :

Código
  1. char *my_strcat(char *s, char esp, char *cad)
  2. {
  3.    char *save = s;
  4.  
  5.    for (; *s; ++s);
  6. *s = esp;
  7.    while ((*++s = *cad++) != '\0');
  8.  
  9.    return(save);
  10. }
  11.  
  12. int main(void)
  13. {
  14.    char s[80] = "hola";
  15.    char p[80] = "mundo";
  16.  
  17.    my_strcat(s, ' ', p);
  18.  
  19.    printf("%s", s);
  20.  
  21.    return 0;
  22. }
  23.  

Saludos
46  Programación / Programación C/C++ / Re: Como calcular cuantos dígitos tiene un entero en: 4 Agosto 2014, 15:05 pm
El problema es que, a diferencia de los dos métodos anteriores, éste que propones da el número de los caracteres de la cadena "numero":

Código
  1. int digito = snprintf(NULL, 0, "%d", "123.314");

y si esta es "123.314" dará 7 mientras que si número se coloca directamente:

Código
  1. int digito = snprintf(NULL, 0, "%d", 123.314);

dará el resultado correcto, "creo", si es un entero e impredecible si es un decimal, aún poniendo %f.

La verdad no lo he probado con números decimales, pero con enteros predecibles si va bien, creo que con eso es suficiente para kutcher según la pregunta inicial

Saludos
47  Programación / Programación C/C++ / Re: Como calcular cuantos dígitos tiene un entero en: 4 Agosto 2014, 04:59 am
Creo que no has entendido mi exposición. Aclaro lo que decía.

Es verdad, debí leer mas detenidamente la explicación que diste

Saludos leosansan
48  Programación / Programación C/C++ / Re: Como calcular cuantos dígitos tiene un entero en: 4 Agosto 2014, 01:22 am
Me explico con un simple ejemplo. Si queremos las cifras del resultado de 3 * 5 sin hacerlo podemos aplicar la propiedad de que el logaritmo de un producto es la suma de los logaritmos y, si estamos trabajando con enteros, el resultado sería:

Código
  1. digitos ( 3 * 5) =  log10 ( 3 * 5 ) = log10 (3) + log10 (5) + 1  = 0 + 0 + 1 = 1

Seguro que obtienes uno ?... el seguimiento que realizas al proceso es equivocado, la multiplicación de 3 * 5 es realizada previamente y el resultado es recibido por la función para calcular el logaritmo del mismo.

Código
  1. digitos ( 3 * 5 ) =  log10 ( 3 * 5 ) = log10 ( 15 ) =  1.17 + 1  = 2

Aprovecho la ocasión para exponer otra opción, pero esta vez usando la función estándar snprintf:

Código
  1. int digito = snprintf(NULL, 0, "%d", numero);

Saludos
49  Programación / Programación C/C++ / Re: ayuda con el shell sort c++ en: 3 Agosto 2014, 03:33 am
hola estoy tratando de hacer el método de ordenamiento Shell Sort pero cuando lo ejecuto no me ordena nada y sigue igual,

Trato de respetar lo máximo posible la estructura de tu código:
 
Edito:

Código
  1. void shell_sort (int *arreglo, int n)
  2. {
  3.    int i, j, aux, inc;
  4.    inc = n/2-1;
  5.  
  6.    while(inc > 0)
  7.    {
  8.        i = 0;
  9.        while(i < n)
  10.        {
  11.            j = i, aux = arreglo[i];
  12.            while (j >= inc && arreglo[j-inc] > aux)
  13.            {
  14.                arreglo[j] = arreglo[j-inc];
  15.                j = j-inc;
  16.            }
  17.            arreglo[j] = aux, i++;
  18.        }
  19.        inc = inc/2;
  20.    }
  21. }

Edite el código anterior ya que me di cuenta de un error
50  Programación / Programación C/C++ / Re: Problema en un Ejercicio de C++ en: 31 Julio 2014, 17:06 pm
Por que me di cuenta de la suma de 3... pero al final eso es incorrecto, con respecto al módulo no sabría como operar haciendo módulo o multiplicando....

El método funcionaria de la siguiente manera:

2 3 6 1 ==> 9  4  5  6
 
6 + 3 = 9 % 10 = 9
1 + 3 = 4 % 10 = 4
2 + 3 = 5 % 10 = 5
3 + 3 = 6 % 10 = 6

Para ello debes trabajar solo con números enteros, no utilices el tipo double ademas dudo que la solución que encontraste te funcione

Saludos
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines