Hola, como dice el titulo, lo que quiero hacer es:
copiar de una variable entera cierta información y guardarla en otra variable.
el problema surge al poner en la variable entero una fecha como la que sigue
int d, a=25-02-1998;
quisiera que la función le saque el guion medio a esa variable:
d=25021998;
gracias por sus respuestas y saludos.
a=25-02-1998
Tu necesitas aprender a manejar cadenas.
la instruccion que muestras es 25-02 = 23-1998 = -1975
😆😆😆
Necesitas hacer substrings y cada que encuentres un guion lo sustitulles.
Podrias hacerlo con la funcion strok()
He logrado separar cada numero en un arreglo y deshacerme de los guiones, pero ahora cuando sumo la primer celda del arreglo (ej: 2) con la segunda celda del arreglo (ej: 0), no da 20. ¿hay alguna forma de sumar esos enteros 2+0=20?
Cita de: fafafa01 en 18 Abril 2016, 23:39 PM
Hola, como dice el titulo, lo que quiero hacer es:
copiar de una variable entera cierta información y guardarla en otra variable.
el problema surge al poner en la variable entero una fecha como la que sigue
int d, a=25-02-1998;
quisiera que la función le saque el guion medio a esa variable:
d=25021998;
gracias por sus respuestas y saludos.
Si solo quieres sacar por pantalla juntos ciertos valores....... es muy simple:
cout << a << b << c << d .... << ... << endl;
Si verdaderamente necesitas concatenar porque vas a devolver eso en una funcion, etc...
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
// se puede generalizar
char* concatnum(int a, int b){
char as[10], bs[10];
static char out[30];
itoa(a,as,10);
itoa(b,bs,10);
strcpy(out,as);
strcat(out,bs);
// podria devolver un "string" (char*) o un entero
return out;
}
int main(void){
cout << concatnum(2,0);
}
EDIT: La funcion que puse no tiene verdadera utilidad (solo te sirve para mirar como funcionan strcpy y strcat) porque solo recibe 2 valores, iba a generalizar pero me tuve que ir a dormir y otro compañero ya te dio una respuesta mejor ahora.
Hola,
Como en programación hay mil maneras de hacer una misma cosa, te dejo otra opción para juntar un array de enteros en uno solo. Ten cuidado con el valor máximo que puede tomar un entero, ya que con esta función es muy fácil pasarlo si se utiliza mal, y ahora mismo no hace ningún tipo de verificación.
#include <stdio.h>
#include <string.h>
int join(int *arr, size_t arr_size)
{
int result, i;
char aux[256];
for (i=0; i<arr_size; i++) {
sprintf(aux + strlen(aux), "%d", arr[i]);
}
sscanf(aux, "%d", &result);
return result;
}
int main(void)
{
int arr[4] = {1, 2, 3, 4};
int result = join(arr, 4);
printf("%d\n", result);
return 0;
}
Saludos!
Compañero @xiruko : te consulto por el uso de sscanf() con "%d"
Tu sabras si es mas eficiente que usar atoi() ?
Cita de: boctulus en 19 Abril 2016, 14:25 PM
Compañero @xiruko : te consulto por el uso de sscanf() con "%d"
Tu sabras si es mas eficiente que usar atoi() ?
Hola,
Es más eficiente
atoi debido a que se ahorra parsear la cadena buscando los especificadores como hace
sscanf. Usé
sscanf para aportar otras funciones distintas a las que ya habían en el tema.
Aquí puedes encontrar una comparación muy buena entre ambas funciones:
http://stackoverflow.com/questions/3420629/convert-string-to-integer-sscanf-or-atoi (http://stackoverflow.com/questions/3420629/convert-string-to-integer-sscanf-or-atoi)
Saludos!
Gracias, me pareció interesante tu codigo y el enlace a StackOverflow ;)
atoi() es inseguro, evita utilizarlo en lo posible a no ser en casos sencillos y controlados; esta función no proporciona ninguna funcionalidad para el tratamiento de errores. El problema más importante con esta es que conduce a un comportamiento indefinido en caso de desbordamiento; por eso es preferible usar strtol una alternativa mucha mas segura por obvias razones.