Tengo un archivo de texto (creado con el programa) así:
CitarHORAS TIEMPO
----------------------------------------------------
2 3.00-5.00
10 6.30-16.30
Necesito obtener solo el primer integer de cada línea y hacer une operación (2
10...).
Este es el código que tengo hasta ahora:
fstream haceCuenta(nombArchivo, ios::in | ios::app);
while(haceCuenta)
{
std::string lineas;
getline(haceCuenta, lineas);
}
esta bien.
Ahora para obtener el numero entero tenes que dividir la cadena cada vez que se encuentre un espacio.
Creo que se separa por tabs, como te vi en el post anterior.
Entonces cada parte la guardas en una cadena y después la pasas a numero con la funcion "atoi(cadena_destino, cadena_fuente);"
Puedes volcar la cadena a un array de chars y leer de letra en letra hasta que haya un espacio.
Bueno pongo el código:
vector<int> vint;
int n;
string str;
while(!haceCuenta.eof() && !haceCuenta.fail())
{
if(!isdigit(haceCuenta.peek()))
{
getline(haceCuenta, str);
continue;
}
haceCuenta >> n;
vint.push_back(n);
getline(haceCuenta, str);
}
if(!haceCuenta.eof())
{
cout << "Error leyendo el archivo" << endl;
return -1;
}
int totalHoras=0;
for(vector<int>::size_type x=0; x<vint.size(); ++x)
{
cout << setw(2) << vint[x] << endl;
totalHoras += vint[x];
}
En vez de guardar la cadena introducida en un string (a mi no me gustan), guárdala en un char[], y luego recórrelo hasta encontrar un espacio
¿Y se puede saber porqué no te gustan?
Me da la sensación de que tengo menos control que con un array de chars, pero bueno, serán cosas mias XD. De todos modos en tu caso si lo haces como te he dicho sale más fácil