• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Stringstream problem

0 głosów
816 wizyt
pytanie zadane 25 stycznia 2019 w C i C++ przez Ryszard Kałuziński Początkujący (280 p.)
void czytajzPliku(string nazwapliku, osobnik*&pierwszy)
{
	string chromo;
	ifstream plikwe(nazwapliku);
	if (plikwe.good() == true)
	{
		while (not plikwe.eof())
		{
			int chromopomocn;
			getline(plikwe, chromo);
			if (not chromo.empty())
			{
				osobnik* wsk = dodajOsobnika(pierwszy, -1);
				stringstream a;
				a << chromo;
				chromosom* wskg = wsk->glowa;
				while (a)
				{
					a >> chromopomocn;
					cout << chromopomocn << " ";
					dodajChromosom(wskg, chromopomocn);
					wskg = wskg->pNext;
				}
				cout << endl;
			}
		}
	}
	plikwe.close();
}

Mam problem ze stringstream, dobrze wczytuje wartości ze stringa, ale gdy na je przekazać do struktury jako inty (ten string to ciąg liczb przedzielonych spacjami) to ostatnia liczba pojawia się 2 razy i wskaźnik na następny element w ostatnim elemencie struktury wskazuje na coś co nie istnieje. RATUNKU.

komentarz 25 stycznia 2019 przez RafalS VIP (122,820 p.)
Pokaż: zawartosc pliku, definicje funkcji dodajChromosom, definicje struktur osobnik i chromosom
komentarz 25 stycznia 2019 przez Ryszard Kałuziński Początkujący (280 p.)
void dodajChromosom(chromosom*&wskg, int a)
{
    wskg = new chromosom{ a,nullptr};
}

struct chromosom
{
    int numer;
    chromosom * pNext;
};

struct osobnik
{
    double f;
    chromosom * glowa;
    osobnik * pNext;
};

zawartość pliku:

2 9 84 9 5 6 25 12
2 98 56 2 54
5 2
8 5 22 5 48 6 1 9 8 7 554 25 235 32
45 6 65  635 6 2 1 763 58
2 5 4
9 64 428 46 387 21 36 2
65 4 898 2 984 3 59 98 4 126 9 6 483 48

W każdej lini wypisuje (i dodaje do listy) 2 razy ostatnią liczbę np. zamiast 2 9 84 9 5 6 25 12 mam 2 9 84 9 5 6 25 12 12

 

komentarz 25 stycznia 2019 przez RafalS VIP (122,820 p.)
zapomniałem o dodaj osobnika :P
komentarz 25 stycznia 2019 przez Ryszard Kałuziński Początkujący (280 p.)
osobnik* dodajOsobnika(osobnik*&pHead, double f)
{
	osobnik*nowy = new osobnik;
	nowy->f = -1;
	if (pHead == nullptr)
	{
		pHead = nowy;
		nowy->pNext = nullptr;
	}
	else
	{
		osobnik*ost = pHead;
		while (ost->pNext)
		{
			ost = ost->pNext;
		}
		ost->pNext = nowy;
		nowy->pNext = nullptr;
	}
	return nowy;
}

proszę bardzo

1 odpowiedź

+1 głos
odpowiedź 25 stycznia 2019 przez j23 Mędrzec (195,220 p.)
wybrane 25 stycznia 2019 przez Ryszard Kałuziński
 
Najlepsza
std::istringstream a(chromo);
chromosom* wskg = nullptr;

while (a >> chromopomocn)
{
	cout << chromopomocn << " ";

	chromosom* p = new chromosom{ a, nullptr };

	if(wskg) { wskg->pNext = p; wskg = p; }
	else wsk->glowa = wskg = p;
}

 

komentarz 25 stycznia 2019 przez Ryszard Kałuziński Początkujący (280 p.)
NIECH BÓG CI TO W DZIECIACH WYNAGRODZI DOBRY CZOWIEKU!!!

Podobne pytania

0 głosów
1 odpowiedź 359 wizyt
pytanie zadane 11 marca 2017 w C i C++ przez Meltern Początkujący (440 p.)
0 głosów
1 odpowiedź 2,456 wizyt
0 głosów
2 odpowiedzi 665 wizyt

93,604 zapytań

142,526 odpowiedzi

322,991 komentarzy

63,088 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...