我坚持从文件中读取数据。所以这里。我有5个国际象棋比赛,但我有一些数字丢失,(第一档),但是,有些人给我带来了一些他们自己的数据(第二档),我需要计算我到底有多少完整的国际象棋桌。长话短说。这是第一个文件的示例。我只需要弄清楚如何正确阅读它。在阅读循环中,很明显我将只获得最后一行,但这是我最好的镜头。我不知道如何获取类内存中的所有数据。我是新手,感谢您的帮助:
//5-number of incomplete chess games. P/Z/R/B/V/K-names of figures. 8/2/2/2/1/1-number of figures
//balta/juoda-white/black; if there is any other way to write this file in a different way and im too stupid to figure it out i would be thankful for the info
5
1 P 8 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 8 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
2 P 6 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 6 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
3 P 4 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 4 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
4 P 2 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 2 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
5 P 0 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 0 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <istream>
using namespace std;
const int Cn = 100;
const char CFd1[] = "Komplektai.txt";
const char CFd2[] = "Parama.txt";
const char CFr[] = "Turnyras.txt";
class Komplektas
{
private:
int eil;
char fig;
int kiek;
string spal;
public:
void Deti(int e, char f, int k, string s);
int ImtiEile() { return eil; }
char ImtiFigura() { return fig; }
int ImtiKieki() { return kiek; }
string ImtiSpalva() { return spal; }
};
void Komplektas::Deti(int e, char f, int k, string s)
{
eil = e;
fig = f;
kiek = k;
spal = s;
}
void Skaityti1(string fv, Komplektas A[], int & x1, int & j);
void Spausdinti1(string fv, Komplektas A[], int x1, int j);
int main()
{
int x1;
int j;
Komplektas A[Cn];
Skaityti(CFd1, A, x1, j1);
Spausdinti(CFr, A, x1, j1);
cout << "Programa baige darba" << endl;
return 0;
}
void Skaityti(string fv, Komplektas A[], int & x, int & j)
{
int eil, kiek;
char fig;
string spal;
ifstream fd(fv.c_str());
fd >> x;
fd >> j;
for (int t = 0; t < x; t++)
fd >> eil;
for (int i = 0; i < j; i++){
fd >> fig >> kiek >> spal;
A[i].Deti(eil, fig, kiek, spal);
fd.ignore();
}
fd.close();
}
void Spausdinti(string fv, Komplektas A[], int x, int j)
{
ofstream fr(fv.c_str());
fr << x << endl;
fr << j << endl;
for (int t = 0; t < x; t++){
for (int i = 0; i < j; i++){
fr << A[i].ImtiEile() << " " << A[i].ImtiFigura() << " " << A[i].ImtiKieki() << " " << A[i].ImtiSpalva() << endl;
}
}
fr.close();
}
答案 0 :(得分:0)
我很困惑,因为我不会说立陶宛语,但是,据我所知,您的读取方法(Skaityti
)读取所有内容并将其存储在一维数组中。您正在循环所有行,并且您正在存储eil
中的所有值。但是,在读取第一行并转到第二行后,您将覆盖第一行的值,依此类推。当你到达最后一行时,你正在读它并覆盖倒数第二行。我相信解决方案是拥有一个二维数组,第一个维度代表行,第二个维度代表给定行的值。这样你就可以拥有每一行的值。
因此A
是一个Komplektas
数组的数组,如
Komplektas A[r][v]
,其中r
表示行数,v
表示值的数量,那么您可以存储t
行的i
值为A[t][i]
。
答案 1 :(得分:0)
感谢您的帮助和对不起代码中的语言。仍然惊讶你知道它是什么语言。我尝试用二维数组(矩阵)做一些事情,但我完全是绿色的。继承人我的尝试。这就是我得到的:
1 P 0 balta 1 Z 0 balta 1 R 0 balta 1 B 0 balta 1 V 0 balta 1 K 0 balta 1 P 0 juoda 1 Z 0 juoda 1 R 0 juoda 1 B 0 juoda 1 V 0 juoda 1 K 0 juoda 1 2 0 juoda
1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda
1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda
1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda
1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda
而不是:
5 13
1 P 8 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 8 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
2 P 6 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 6 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
3 P 4 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 4 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
4 P 2 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 2 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
5 P 0 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 0 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
class Komplektas
{
private:
int eil;
char fig;
int kiek;
string spal;
public:
Komplektas(int e = 0, char f = 0, int k = 0, string s = "") :
eil(e), fig(f), kiek(k), spal(s) { }
~Komplektas() { }
void Deti(int e, char f, int k, string s) { eil = e; fig = f, spal = s; }
int ImtiEile() { return eil; }
char ImtiFigura() { return fig; }
int ImtiKieki() { return kiek; }
string ImtiSpalva() { return spal; }
};
class Matrica
{
public:
static const int CMaxEil = 100;
static const int CMaxSt = 15;
private:
Komplektas A[CMaxEil][CMaxSt];
int n;
int m;
public:
Matrica(int nn = 0, int mm = 0) : n(nn), m(mm) { }
~Matrica() { }
int ImtiN() { return n; }
int ImtiM() { return m; }
void DetiN(int nn) {n = nn;}
void DetiM(int mm) {m = mm;}
void DetiReiksme(int i, int j, Komplektas r) { A[i][j] = r; }
Komplektas ImtiReiksme (int i, int j) { return A[i][j]; }
};
void Skaityti1(string fv, Matrica & A);
void Spausdinti1(string fv, Matrica & A);
int main()
{
Matrica figuros;
Skaityti1(CFd1, figuros);
Spausdinti1(CFr, figuros);
cout << "Programa baige darba" << endl;
return 0;
}
void Skaityti1(string fv, Matrica & A)
{
int n, m, eil, kiek;
char fig;
string spal;
Komplektas x;
ifstream fd(fv);
fd >> n >> m;
A.DetiN(n);
A.DetiM(m);
for (int i = 0; i < n; i++){
fd >> eil;
for (int j = 0; j < m; j++){
fd >> fig >> kiek >> spal;
x.Deti(eil, fig, kiek, spal);
A.DetiReiksme(i, j, x);
cout << x.ImtiEile() << " " << x.ImtiFigura() << " " << x.ImtiKieki() << " " << x.ImtiSpalva() << endl;
}
}
fd.close();
}
void Spausdinti1(string fv, Matrica & A)
{
Komplektas x;
ofstream fr(fv);
cout << A.ImtiN() << " " << A.ImtiM() << endl;
for (int i = 0; i < A.ImtiN(); i++) {
for (int j = 0; j < A.ImtiM(); j++) {
x = A.ImtiReiksme(i, j);
fr << x.ImtiEile() << " " << x.ImtiFigura() << " " <<
x.ImtiKieki() << " " << x.ImtiSpalva() << " ";
}
fr << endl;
}
fr.close();
}