Cześć !
Nie mam kompletnie pomysłu jak wczytać z pliku dwuwymiarową tablicę o różnych rozmiarach ( tzn. raz 4x10, 10x50, 100x100 )
Pierwsze dwie liczby to rozmiar x i y tablicy, reszta to liczby które chce wczytać ( przyjmuję, że są z zakresu 0 - inf )
Przykładowy plik wygląda tak
15 10
19 27 27 27 27 27 27 27 27 5 5 5 5 16 16
19 27 27 27 27 27 27 27 27 5 5 5 5 16 16
19 27 27 27 27 27 27 27 27 5 5 5 5 16 16
19 27 27 27 27 27 27 27 27 5 5 5 5 16 16
16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
13 13 13 13 13 13 5 5 5 5 1 1 1 16 16
13 13 13 13 13 13 5 5 5 5 1 1 1 16 16
13 13 13 13 13 13 5 5 5 5 1 1 1 16 16
13 13 13 13 13 13 5 5 5 5 1 1 1 16 16
lub
3 3
12 12 12
12 12 12
12 12 12
do tej pory udało mi się wczytać rozmiar trochę łopatologiczną metodą ale jednak działającą.
funkcja odpowiedzialna za wczytanie:
void cMapa::WczytajMape(std::string nazwa)
{
std::fstream plik;
std::string schowek;
std::string x;
std::string y;
int a = 0;
plik.open(nazwa, std::ios::in);
{
std::getline(plik, schowek);
for (size_t i = 0; i < schowek.size(); i++)
{
if (schowek[i] == 32)
a++;
if (a == 0)
x.push_back(schowek[i]);
else
y.push_back(schowek[i]);
}
rozmiar.x = std::stoi(x);
rozmiar.y = std::stoi(y);
for (size_t i = 0; i < rozmiar.y; i++)
{
for (size_t i = 0; i < rozmiar.y; i++)
{
}
}
}
plik.close();
}
i to pola w klasie
class cMapa
{
public:
cMapa();
~cMapa() = default;
protected:
sf::Vector2u rozmiar;
std::vector<std::vector<sf::RectangleShape>> pola;
public:
void WczytajMape(std::string nazwa);
};
kiedyś używałem zczytywania do znaku ale teraz nie wiem czemu nie chce zadziałać:
std::getline(plik, schowek, " ");
a i przy okazji mam jeszcze jedno pytanie, czy da się jakoś ustawić żeby i było równe 0 przy takiej metodzie iterowania przez stringa ?
w ascii 51 to wlasnie spacja :/