Qt - QString i QStringList

0

Mam taki kod

    QStringList Matrix;
    Matrix << ("1;x;7;=;7\n") << ("2;x;7;=;14\n");

    QString str;
    QStringList field;
    
    for(int i=0; i<Matrix.size(); ++i){
        for(int j=0; j<Matrix[i].size(); ++j){
            str.append(Matrix[i][j]);
        }
            field << str.split(";");
    }

chcę rozdzielić tą macierz ze znaków ;

ale w wyniku uzyskuję (dubluje się pierwszy wiersz macierzy)

("1", "x", "7", "=", "7\n", "1", "x", "7", "=", "7\n2", "x", "7", "=", "14\n")

a chcę uzyskać

("1", "x", "7", "=", "7\n", "2", "x", "7", "=", "14\n")

Co robię źle ?

1

Masz problem algorytmiczny.

Dla uproszczenia weźmy sobie

Matrix << "A" << "B" << "C" << "D";
//...
qDebug() << field;

Wynik:

("A", "AB", "ABC", "ABCD")

Jest tak dlatego, że nie czyścisz str.

Zamiast tego można prosto i czytelnie napisać:

	for(QString const& str : Matrix) {
		field << str.split(";");
	}
2

Co ty robisz? komplikujesz coś tak prostego:

    QStringList Matrix;
    Matrix << ("1;x;7;=;7\n") << ("2;x;7;=;14\n");

    QStringList field;
    for (auto s : Matrix) field << s.split(QLatin1Char(';'));

A co twój kod robi źle? field << str.split(";"); umieściłeś w pętli więc wykonuje się dwa razy.
Naucz się używać debuggera ASAP - wtedy od razu byś to sam wyłapał.

0

a czy pokażecie jak to powinno wyglądać na tradycyjnej pętli for ?

1

A po co chcesz się tak męczyć? To ogółem zła praktyka, ale proszę:

    for(int i = 0; i < Matrix.size(); i++) {
        QString const& str = Matrix[i];
        field << str.split(";");
    }
0
for(int i=0; i<Matrix.size(); ++i){
        for(int j=0; j<Matrix[i].size(); ++j){
            str.append(Matrix[i][j]);
        }
        field << str.split(";");
        str.clear();
    }

działa ten kod :) dzięki za podpowiedzi :) zapytacie pewnie dlaczego piszę "po staremu" bo na chwilę obecną to bardziej rozumiem, auto i inne nowsze konstrukcje jeszcze nie zostały przećwiczone, ponieważ skupiam się na Qt.

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