Dzielenie stringa przy określonym znaku.

Dzielenie stringa przy określonym znaku.
TA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:37
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

Kopiuj
#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;
}
edytowany 1x, ostatnio: TenAnonim
Sunnydev
dlaczego tego zadania nie zrobisz w excelu lub accessie?
au7h
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:215
2

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

Kopiuj
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

edytowany 2x, ostatnio: au7h
TomaszLiMoon
  • Rejestracja:prawie 10 lat
  • Ostatnio:2 dni
  • Postów:530
3

Spróbuj

Kopiuj
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.

TA
Dzieki zrobione;) Wkleje poniżej to co stworzyłem byłoby miło gdybyś skomentował czy jest ok czy źle.
TA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:37
0
Kopiuj
#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;
}
TomaszLiMoon
  • Rejestracja:prawie 10 lat
  • Ostatnio:2 dni
  • Postów:530
1

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

Kopiuj
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()

TA
Gotowe dzięki!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.