Hogyan lehet txt-ből beolvasott adatokat rendszerezve tárolni C++ -ban? (struktúrával? )
Önszorgalomból elkezdtem gyakorolni a májusi emelt infó érettségire (az előző évek feladataiból), és kb 1 órája próbálkozom, de sehogy se sikerül beolvasni a txt-ből rendszerezve az adatokat. Muszáj C++ -ban megcsinálni (ezt tanultuk infó fakton a suliban és nem tudok májusig egy új nyelvet megtanulni). A beolvasás után már tudok műveleteket végezni velük, de nem tudom hogyan kéne rendszerezve tárolni.
Ez a feladat: A fájlban legfeljebb 500 versenyző adatai szerepelnek. A fájl első sorában a helyes válaszok szerepelnek. A fájl többi sora a versenyzők kódjával kezdődik, ezt egy szóköz, majd az adott versenyző által adott válaszok sorozata követi. A versenyzők kódja legfeljebb 5 karakterből áll. A válaszok a feladatokkal egyező sorrendben, elválasztójel nélkül,
nagybetűvel szerepelnek.
így néz ki a txt:
BCCCDBBBBCDAAA
AB123 BXCDBBACACADBC
AD995 BABCDABCBCBBBA
AH97 BCACDBDDBCBBCA
.
.
így tovább a versenyzők és a válaszaik.
Hogy tudom tárolni a helyes válaszokat és külön, hogy egy versenyző milyen választ adott?
#include <string>
#include <iostream>
#include <map>
#include <fstream>
#include <algorithm>
using std::cout;
using std::endl;
using std::string;
using std::multimap;
using std::ifstream;
using std::min;
typedef multimap<string, string> TCompetitorList;
typedef TCompetitorList::value_type TCompetitor;
typedef TCompetitorList::iterator TIterator;
const string FileName = "input.txt";
int GetScore(const string & Answer, const string & CorrectAnswer);
int main()
{
TCompetitorList Competitors;
string CorrectAnswer;
string Code;
string Answer;
TIterator i;
int Score;
ifstream fin;
fin.open(FileName.c_str());
if (fin.is_open()) {
fin >> CorrectAnswer;
while (not fin.eof()) {
fin >> Code;
fin >> Answer;
Competitors.insert(TCompetitor(Code, Answer));
}
fin.close();
}
cout << "CorrectAnswer: " << CorrectAnswer << endl;
for (i = Competitors.begin(); i != Competitors.end(); i++) {
Code = i->first;
Answer = i->second;
Score = GetScore(Answer, CorrectAnswer);
cout << "Code: " << Code << "\t";
cout << "Answer: " << Answer << "\t";
cout << "Score: " << Score << endl;
}
return 0;
}
int GetScore(const string & Answer, const string & CorrectAnswer)
{
int i;
int n = min(Answer.length(), CorrectAnswer.length());
int Score = 0;
for (i = 0; i < n; i++) {
if (Answer[i] == CorrectAnswer[i]) {
Score++;
}
}
return Score;
}
Köszönöm, közben rájöttem egy egyszerűbb megoldásra.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string helyesvalasz, kodszama[500], valaszok[500];
int x=0;
fstream aa;
aa.open ("valaszok.txt");
getline (aa, helyesvalasz);
cout<<helyesvalasz<<endl;
while (aa)
{
aa>>kodszama[x]>>valaszok[x];
cout<<kodszama[x]<<" "<<valaszok[x]<<endl;
x++;
}
aa.close();
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!