[C++] Hogyan számolhatnám meg egy txt file-ban lévő oszlopok számát?
Minden soron belül van x karakter, ezek a karakterek szóközzel vannak tagolva, pl.: 1 2 3 4 5
Több sor is van, az elképzelésem az volt, hogy getline-al beolvasok egy tetszőleges sort sorvégjelig, majd megszámolom a soron belül az elválasztó karaktereket, jelen esetben szóközöket. A sorok végére nem rakok spacet, egyből '\n' következik, tehát az így megszámolt karakterek számához még hozzáadnék 1-et.
A problémám: Sajnos nem tűnik működőképesnek.
Itt a kód részletem:
int n;
f>>n;
matrix.resize(n);
int m = 1;
string sor;
getline(f, sor, '\n');
for (int i = 0; i < sizeof(sor); i++)
{
if (sor[i] == ' ')
{
m+=1;
}
}
for (int i = 0; i < matrix.size(); i++)
{
matrix[i].resize(m);
for (int j = 0; j < matrix[i].size(); j++)
{
f>>matrix[i][j];
}
}
A teszt file-om így néz ki:
1 2 3
4 5 6
7 8 9
Ebből csak a 4 5 6-ot rakja bele a mátrixba :/ Tudnátok segíteni, hogy mi lehet a baj?
Ez mi az elején?
int n;
f>>n;
matrix.resize(n);
A tesztfájlodból nem látom mit akarsz beolvasni.
Ne privátban válaszolj. Azzal nem a sorokat olvasod be legfeljebb a sorok számát, amit megadsz a fájlod elején. De nem adtál meg ilyen adatot. Ha kapsz egy kész kódot legalább legyél azzal tisztában mit csinál.
Ha nem így csinálnád csak így "tanították", akkor csináld úgy ahogy szeretnéd. Nincs megkötve a kezed, sokféleképpen lehet megoldani ugyan azt a problémát.
sizeof(getline(f, sor, '\n))
Ez visszaadja a getline által visszadobott változó méretét byte-ban. A harmadik paraméter sem szükséges hiszen alapból az.
Szóközök megszámolása praktikusan:
std::ifstream ist{"..."};
for (std::string s; std::getline(ist, s);)
{
std::cout << "szokozok szama: " << std::count(s.cbegin(), s.cend(), ' ') << '\n';
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!