|
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:char s1[] = " 1234 789 1234 321 9876 5678 "; for( i = 0, j = 0; s1[ i ] != '\0'; i++, j++ ) { if( strchr( " \0", s1[i + 1] ) && j == 3 ) { for( j = i - 3; j <= i; j++ ) s1[ j ] = '*'; cant++, j = 0; } s1[i + 1] == ' ' ? (j = -2) : ( s1[ i ] == ' ' && i == 0 ) ? (j = -1) : (j = j); } printf("\n Cadena reemplazada.: %s\n", s1); printf("\n Se han sustituido un total de %d palabras.\n\n", cant);
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: char *strcat(char *s, const char *cad) { char * save = s; for (; *s; ++s); while ((*s++ = *cad++) != '\0'); return (save); }
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
|
|
|
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 : char *my_strcat(char *s, char esp, char *cad) { char *save = s; for (; *s; ++s); *s = esp; while ((*++s = *cad++) != '\0'); return(save); } int main(void) { char s[80] = "hola"; char p[80] = "mundo"; my_strcat(s, ' ', p); printf("%s", s); return 0; }
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": int digito = snprintf(NULL, 0, "%d", "123.314");
y si esta es "123.314" dará 7 mientras que si número se coloca directamente: 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
|
|
|
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: 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. 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: 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:void shell_sort (int *arreglo, int n) { int i, j, aux, inc; inc = n/2-1; while(inc > 0) { i = 0; while(i < n) { j = i, aux = arreglo[i]; while (j >= inc && arreglo[j-inc] > aux) { arreglo[j] = arreglo[j-inc]; j = j-inc; } arreglo[j] = aux, i++; } inc = inc/2; } }
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
|
|
|
|
|
|
|