Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Extraer int desde un string c++

Estas en el tema de Extraer int desde un string c++ en el foro de C/C++ en Foros del Web. hola a todos tengo un pequeño problemita para la "U" ojala puedan ayudarme; necesito pasar a variables la siguiente cadena separada por "+" y "/" ...
  #1 (permalink)  
Antiguo 16/06/2012, 17:33
 
Fecha de Ingreso: junio-2012
Mensajes: 1
Antigüedad: 11 años, 10 meses
Puntos: 1
Extraer int desde un string c++

hola a todos tengo un pequeño problemita para la "U" ojala puedan ayudarme;

necesito pasar a variables la siguiente cadena separada por "+" y "/" ej:

25+3/23+6

visitae1=25
locale1=3
visitae2=23
locale2=6

en internet estuve buscando algo que me sirvió pero no lo suficiente ya que no pude pasar a variables los datos, solo pude separarlos.

Código:
/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="25+5/13+6";
  char  * pch;
  pch = strtok (str," +/");
 int visitae1;
 int locale1;
 int visitae2;
 int locale2; 
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    
  
    pch = strtok (NULL, " +/");
    
    
  }
  system("pause");
  
  return 0;
}
  #2 (permalink)  
Antiguo 16/06/2012, 23:28
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Extraer int desde un string c++

Hola! busca la funcion atoi
  #3 (permalink)  
Antiguo 19/06/2012, 14:54
 
Fecha de Ingreso: junio-2012
Mensajes: 2
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Extraer int desde un string c++

Buenas, soy nuevo en el foro pero estoy desesperado. Hace algunos años estuve programando algo en C y ahora mismo no me acuerdo de nada, espero encontrar algo de ayuda. Utilizo este hilo abierto para no llenar el foro, pues el tema es -remotamente, ya que uno de mis problemas es al traducir una variable de entero a char *- similar:

Estoy intentando hacer un programa que dado un fichero de entrada prueba.txt lea cada línea, cuente el número de caracteres, espacios incluídos, de cada línea (tendrán un máximo de 1500) y genere un fichero de salida, prueba2.txt con las mismas líneas del fichero de entrada, con el mismo texto, salvo que delante de cada línea aparezca el número de caracteres de dicha línea, con cuatro dígitos.

Por ejemplo, si el fichero de entrada es el siguiente:

HOLA
HOLA HOLA
HOLA HOLA HOLA
HOLA HOLA HOLA .

El fichero de salida debería de ser:

0004HOLA
0009HOLA HOLA
0015 HOLA HOLA HOLA
0023 HOLA HOLA HOLA .

Para traducir de numérico a alfanumérico no he utilizado atoi pues mi compilador no lo acepta, pero el sprintf ya me vale. Ambas funciones me dejan un molesto \0. Además tampoco sé cómo pasar del número entero 4 a la cadena '0004'. Este es el código que llevo hecho

Cita:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
FILE *fichero_in;
FILE *fichero_out;

char *entrada;
char *salida;

int longitud;
int i;

char *longitud_c;

entrada = (char*)malloc(1000);
salida = (char*)malloc(1000);
longitud_c = (char*)malloc(4);

/* Abre ficheros */
fichero_in = fopen("d:/prueba.txt","r");
if (fichero_in == NULL) exit(1);

fichero_out = fopen("d:/prueba2.txt","a");
if (fichero_out == NULL) exit(1);

/* Por cada línea del fichero... */
while (feof(fichero_in) == 0)
{
/* Lee Fichero */
fgets(entrada,999,fichero_in);

/* Longitud de la línea */
longitud = strlen(entrada);

/* No contar el caracter \n del final */
longitud = longitud - 1;

/* Pasar de int a char */
sprintf(longitud_c, "%d", longitud);

/* Concatenar la longitud con la línea */
strcat(salida, longitud_c);
strcat(salida, entrada);

/* Grava fichero salida */
fputs(entrada, fichero_out);

}

fclose(fichero_in);
fclose(fichero_out);
free(entrada);
free(salida);
free(longitud_c);
return 0;
}
(no funciona, en la variable salida me guarda caracteres chungos). Me podríais echar una mano diciéndome qué hay mal y cómo pasar de 7, 15 o 337 a '0007', '0015' o '0337' respectivamente. Muchas gracias por adelantado
  #4 (permalink)  
Antiguo 19/06/2012, 16:15
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Extraer int desde un string c++

Hola! el codigo esta dentro de todo bien, el problema es esto
Código C:
Ver original
  1. fputs(entrada, fichero_out);
queres guardar en el fichero de salida lo apuntado por entrada, tenes que usar el puntero salida

En ves de hacer dos strcat, sprintf, fputs... con solo un fprintf:
Código C:
Ver original
  1. fprintf(fichero_out,"%d %s",longitud,entrada);
es igual al printf solo q la salida la manda al fichero.

Ojo esto no te soluciona el tema de '0007' '0015' etc... Lo primero que se me ocurre es obtener la cantidad de digitos de la longitud. Ej: el numero 15, dos digitos
Código C:
Ver original
  1. cero=0; ndigitos=2;
  2. while((MAX_DIGIT-ndigitos)>0) {
  3. fprintf(fichero_out,"%d",cero);
  4. ndigitos++;
  5. }
  6. fprintf(fichero_out,"%d %s",longitud,salida);

Te qda para hacer como saber la cantidad de digitos. Saludos

PD: para la prox. abri tu propio post para no mezclar las respuesta de uno y otro
  #5 (permalink)  
Antiguo 20/06/2012, 15:04
 
Fecha de Ingreso: junio-2012
Mensajes: 2
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Extraer int desde un string c++

Muchísimas gracias, César!
  #6 (permalink)  
Antiguo 20/06/2012, 15:23
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Extraer int desde un string c++

De nada :)
  #7 (permalink)  
Antiguo 22/06/2012, 08:36
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Respuesta: Extraer int desde un string c++

amigo, prueba hacer eso usando atoi() para convertir a int y atof() para float bo double , aqui tienes un ejemplo en tu codigo..

Código:
/* strtok example */
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <vector>
using namespace std;

int main ()
{

  vector <int> list;
  char str[] ="25+5/13+6";
  char  * pch;
  pch = strtok (str," +/");
 int visitae1;
 int locale1;
 int visitae2;
 int locale2; 
  while (pch != NULL)
  {
    list.push_back(atoi(pch));    
    pch = strtok (NULL, " +/");        
  }  
  
  for (int i =0; i <  list.size(); i++)
      cout<<list[i]<<endl;
  
  
  system("pause");
  
  return 0;
}
s2
crono

Etiquetas: int, string, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:05.