» »

c++ DODAJANJE elementov iz datoteke v vektor

c++ DODAJANJE elementov iz datoteke v vektor

Androm3da ::

Pozdravljeni, napisati moram funkcijo, ki iz datoteke prebere seznam datumov (oblika: leto mesec dan), vrne pa vektor datumov.
Primer vhodne vrstice v datoteki (datumi.txt):
2014 3 1
2014 1 29
2012 3 22

Zdej pa bi mene zanimalo kako bi jaz lahko dodal seznam datumov v vector. Moram najprej dodat seznam v objekte in pol
dodam objekte v vektor al kako bi se lotil naloge. Če ima mogoče kdo kakšen nasvet?

ragezor ::

naredis struct datum z polji leto, mesec, dan (al pa ce ma C++ ze kaksen vgrajen struct za datume?)

potem preberes vrstico po vrstico, ustvarjas datum structe iz prebranega in te structe dodajas v vektor.

Androm3da ::

class Datum
{
    private:
       int leto;
       int mesec;
       int dan;
};

class Tabela
{
   private:
       vector<Datum> seznam_Datumov;
  public:
       ...
}    

main:
string line;
	ifstream datoteka("datumi.txt");
	
	Tabela TabelaDatumov();

	if(datoteka.is_open())
	{
		while(getline(datoteka, line))
		{
			cout << line << endl;	//tukaj bi potem mogel narditi da bi mi v 
		}                               // objekt shranjevalo leto mesec in dan
		datoteka.close();
	}


Pol praviš da bi shtanjeval posamično v polja dan[], mesec[], leto[]?? ve mogoče kdo kako rešiti,bi bila mogoče kakšna funkcija od fstream uporabna, ali podobno...

black ice ::

Mavrik ::

Saj imaš dobro idejo in si dobro začel. Zdaj samo moraš za vsako vrstco ustvariti nov Datum objekt in ga dati v vector :)
The truth is rarely pure and never simple.

mallard ::

Predlagam, da overloadaš operator>> za Datum razred. Tako boš lahko napisal:

Datum d;
while( datoteka >> d )
{
     seznam_datumov.push_back(d);
}

Poglej si, kako se to naredi, pa vprašaj, če kaj ne bo šlo.

Pa mimogrede, tole:
Tabela TabelaDatumov();

je deklaracija funkcije, ki nima parametrov in ki vrne razred Tabela. Kar rabiš je eno od sledečega:
Tabela TabelaDatumov;
Tabela TabelaDatumov = TabelaDatumov();
Tabela TabelaDatumov {};

Zgodovina sprememb…

  • spremenilo: mallard ()

Androm3da ::

Hvala vsem za pomoč :D
Zdej trenutno kaj me muči je da bi rad vpisoval elemente it datoteke v objekte, pozneje ko to zrihtam pa pol še v vektor. Če mogoče kdo vidi kaj delam narobe??

to mi pa izpiše:
 to mi pa izpiše

to mi pa izpiše



string line;
	ifstream datoteka("vhod.txt");
	
	Tabela TabelaDatumov();

	int st_datumov = 0;
	if(datoteka.is_open())
	{
		while(getline(datoteka, line))
		{
			//cout << line << endl;
			st_datumov++;
		}
		cout << endl;

		Datum* datumi = new Datum[st_datumov];

		for(int i = 0; i < st_datumov; i++)
		{
			datoteka >>  datumi[i].leto >> datumi[i].mesec >> datumi[i].dan;
		}

		for(int i = 0; i < st_datumov; i++)
		{
			cout << datumi[i].leto << datumi[i].mesec << datumi[i].dan << endl;
		}
		datoteka.close();
	}
	else
		cout << "Datoteka ne obstaja" << endl;


//zdej mam leto,dan,mesec tipa char, če imam jih pa tipa int mi pa izpiše -neka števila, tak da ima kdo kakšno idejo?
class Datum
	{
	public:
		char leto;
		char dan;
		char mesec;

Zgodovina sprememb…

Tutankhamun ::

#include "iostream"
#include "sstream"
#include "fstream"
#include "vector"

class CDate
{
public:
	friend std::istream& operator>>(std::istream& os, CDate& cd);
	friend std::ostream& operator<<(std::ostream& os, const CDate& cd);

private:
	int m_year;
	int m_day;
	int m_month;
};

std::istream& operator>>(std::istream& os, CDate& cd)
{
	os >> cd.m_year >> cd.m_month >> cd.m_day;
	return os;
}

std::ostream& operator<<(std::ostream& os, const CDate& cd)
{
	os << "year: " << cd.m_year << ", month: " << cd.m_month << ", day: " << cd.m_day << std::endl;
	return os;
}

class CDateTable
{
public:
	CDateTable();

	int Read(const char *fname);
	void Display();

private:
	std::vector<CDate> m_dates;
};

CDateTable::CDateTable()
{
	m_dates = std::vector<CDate>();
}

int CDateTable::Read(const char *fname)
{
	std::fstream fstr;
	CDate cd;

	fstr.open(fname);
	if (!fstr.is_open())
	{
		return -1;
	}

	while (!fstr.eof())
	{
		fstr >> cd;

		m_dates.push_back(cd);
	}

	fstr.close();

	return 0;
}

void CDateTable::Display()
{
	std::vector<CDate>::iterator iter;

	for (iter = m_dates.begin(); iter != m_dates.end(); ++iter)
	{
		std::cout << (CDate)*iter;
	}
}

int main(int argc, char *argv[])
{
	CDateTable dtab;

	dtab.Read("datumi.txt");

	dtab.Display();

	return 0;
}
AMD Phenom QUAD 9950 Black Edition, 8GB


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Pomoč pri programiranju v C++

Oddelek: Programiranje
141808 (1375) amacar
»

Statistika dijakov, pomoc

Oddelek: Programiranje
211777 (1261) Mitja Bonča
»

Pomoc pri nalogi

Oddelek: Programiranje
152003 (1809) FuI2cY
»

[C#] izdelava tabele

Oddelek: Programiranje
71987 (1813) majoneza
»

c++ datoteke

Oddelek: Programiranje
464037 (3526) Vesoljc

Več podobnih tem