dimanche 1 décembre 2019

Unable to assign a range sub-string to an array of strings. c++

so I'm unable to create a substring cut using ranges. I am making an airport program where you feed the program a txt.file and it has to divide the lines I get from it into different strings. For instance, I have the following text data:

CL903 LONDON 41000 14.35 08906 //number of flight, destination, price, etc.

UQ5723 SYDNEY 53090 23.20 12986

IC5984 TORONTO 18030 04.45 03260

AM608 TOKYO 41070 18.45 11315

so the first string will be on the lines of this (variables are in Spanish):

numVuelo[n] = M[n].substr(0,5)

this line will work perfectly, but when I move to the next one (from 7 to 14), it tells me that it's out of range, even though It's between the 0 and 31st values of the length of the string.

M[n] gets all of the strings on the text, I'm using Codeblocks and a class style with header and all. I'll copy the code below...

This is my header Vuelo.h:

#ifndef VUELO_H
#define VUELO_H
#include <iostream>
#include <fstream>
#include <string>
#define NUM_FLIGHTS 10

using namespace std;

class Vuelo
{
    public:
        Vuelo(int N);
        virtual ~Vuelo();

        void setM();
        void setNumVuelo(string _numVuelo, int n);
        void setDestino(string _destino, int n);
        void setPrecio(string _precio, int n);


    private:
        string M[NUM_FLIGHTS];
        string numVuelo[NUM_FLIGHTS];
        string destino[NUM_FLIGHTS+1]; //somehow "destino" doesn't work without the +1 but everything else does
        float precio[NUM_FLIGHTS];

Then, on another code called Vuelo.ccp i have the following

#include "Vuelo.h"

Vuelo::Vuelo(int N)
{
    M[N] = { };
    numVuelo[N] = { };
    destino[N] = { };
    precio[N] = { };
}
Vuelo::~Vuelo()
{
    //nope
}
void Vuelo::setM()
{
    int c = 1;
    string s;
    ifstream F ("flights.txt");
    if(F.is_open())
    {
        while (!F.eof())
        {
            getline(F,s);
            M[c] = s;
            cout << M[c] << endl;
            c++;
        }
        //sets all values
    for(c = 0; c < NUM_FLIGHTS; c++)
    {
        setNumVuelo(M[c],c);
        setDestino(M[c],c);
        setPrecio(M[c],c);
    }
    F.close();
    }
    else
    {
        cout << "ERROR document wasn't found" << endl;
    }
}

void Vuelo::setNumVuelo(string _numVuelo, int n)
{
    numVuelo[n]= _numVuelo.substr(0,5); //this works
    cout << numVuelo[n] <<endl;
}

void Vuelo::setDestino(string _destino, int n)
{
    destino[n] = _destino.substr(7, 13);                              //PROBLEM HERE
    cout << destino[n] << " " << destino[n].length() << endl;
}

void Vuelo::setPrecio(string _precio, int n)
{
    string p = _precio.substr(15,19);                                 //PROBLEM HERE
    precio[n] = atof(p.c_str());
    cout << precio[n] <<endl;
}

And finally my main looks like this:

#include "Vuelo.h"
#include <iostream>
#include <fstream>
#include <string>
#define NUM_FLIGHTS 10

using namespace std;

int main()
{
    cout << "Bienvenido, reserva tu vuelo!" << endl;
    cout << "-----------------------------------" << endl;

    Vuelo* flight = new Vuelo(NUM_FLIGHTS);

    flight->setM(); 

    return 0;
}

Thanks :)

Aucun commentaire:

Enregistrer un commentaire