Dzielenie stringa przy określonym znaku.

0

Witam mam powiedzmy takie wejście z pliku tekstowego:
WU11;10292;3020;12222;123
WA01;03939;49494;423;23
WU16;12312;5455;3432;4344

Dzielenie do zmiennej następuje jeżeli jest znak ;

Jak podzielić to do kontenera danych? Do tej pory zrobiłem to ale zablokowałem się na tym wczytywaniu... Próbowałem coś tam zrobić ale średnio mi to wychodzi:/ Jeżeli chcecie mogę wkleić moje wypociny ale i tak nie działa:D

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream plik;
string linia;

struct dane
{
    string wojewodztwo;
    int women2013,men2013,women2014,men2014;
};

vector <dane> v_dane;

int main()
{
    plik.open("kraina.txt",ios::in);
    while(getline(plik,linia))
    {
    }
    return 0;
}
2

Ogólnie powinieneś pokombinować używając tych dwóch funkcji

String data = ...
...
data.substr(pos_begin, pos_end);
data.find(";")

pierwsza wycina łańcuch znaków od begin do enda i zwraca wycięty łańcuch, a druga zwraca indeks pierwszego wystąpienia elementu podanego w argumencie, jeżeli brak wtedy npos

3

Spróbuj

using namespace std;

stringstream input {"WU11;10292;3020;12222;123"};
string fraction {};
vector<string> output;

while( getline(input , fraction , ';') ){ output.push_back(fraction ); }

musisz jeszcze dodać odpowiednie biblioteki.

0
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
#include <cstdlib>

using namespace std;

ifstream plik;
string linia;
int linie=0;

struct dane
{
    string wojewodztwo;
    int women2013,men2013,women2014,men2014;
};

vector <dane> v_dane;

int main()
{
    plik.open("kraina.txt",ios::in);
    while(getline(plik,linia))
    {
        dane w;
        stringstream input{linia};
        string fraction {};
        vector<string> output;
        while(getline(input, fraction, ';'))
        {
            output.push_back(fraction);
        }
        w.wojewodztwo=output[0];
        w.women2013=atoi(output[1].c_str());
        w.men2013=atoi(output[2].c_str());
        w.women2014=atoi(output[3].c_str());
        w.men2014=atoi(output[4].c_str());
        v_dane.push_back(w);
        output.clear();
        linie++;
    }
    for(int i=0; i<linie; i++)
    {
        cout<<v_dane[i].women2013<<endl;
    }
    return 0;
}
1

Możesz jeszcze skrócić kod używając:

v_dane.push_back( dane { output[0] , stoi(output[1]) , stoi(output[2]) , stoi(output[3]) , stoi(output[4]) } ); 

I nie używaj zmiennych globalnych - przenieś ich definicję do int main()

1 użytkowników online, w tym zalogowanych: 0, gości: 1