hej, pisze wlasnie program, ktory ma za zadanie odczytanie wspolrzednych z pliku tekstowego i zapisanie go w pamieci.
w pliku tekstowym interesuja nas linijki zaczynajace sie "*" i "P". Kazda gwiazdka okresla oddzielny obiekt (punkt, łamana, poligon), a linijki z literą P zawierają wspołrzędne dla punktów określonego obiektu.
stworzylem dwa wektory: jeden przechowuje liczbe za gwiazdka(okresla ona rodzaj obiektu - punkt-1, łamana-4, poligon-5) oraz ilość punktów, które dany obiekt posiada.
drugi wektor przechowuje punkty.
mam teraz problem z tym, aby wyswietlic moje dane.
powinienem wyswietlic wartosc z pierwszego wektora okreslajaca rodzaj obiektu (czyli 5, 4 albo 1), nastepnie sprawdzic ile punktow ma dany obiekt (czyli sprawdzic kolejny element w pierwszym wektorze) i wyswietlic odpowiednia ilosc punktow z drugiego wektora.
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <cstdlib>
#include <vector>
using namespace std;
string x;
string y;
struct Point
{
double x, y;
Point(double double1, double double2)
: x(double1)
, y(double2)
{
}
};
vector<Point*> Punkty;
vector<Point*>::iterator it_tab = Punkty.begin();
vector<double> Coto;
int main()
{
double a = 0;
fstream plik;
plik.open("ObiektyTerenowe.txt");
string linia;
if (plik.good() == true)
{
while (!plik.eof())
{
getline(plik, linia);
if (linia[0] == '*')
{
string l = linia.substr(1, 1);
Coto.push_back(atof(
l.c_str())); // chcialem tu uzyc funkcji stoi, ale kompilator wyrzucal mi blad
while (plik.peek() != '*' && !plik.eof())
{
getline(plik, linia);
if (linia[0] == 'P')
{
x = linia.substr(4, 13);
y = linia.substr(16, 13);
double wspx = atof(x.c_str());
double wspy = atof(y.c_str());
Punkty.push_back(new Point(wspx, wspy));
a++;
}
}
Coto.push_back(a);
a = 0;
}
}
plik.close();
for (int i = 0; i < Coto.size(); i = i + 2) // wyswietlanie danych... ????
{
cout << Coto[i] << endl;
for (int i = 0; i < Coto[i + 1]; i++)
{
cout < < < < endl;
}
}
}
Punkty.clear();
Coto.clear();
return 0;
}