В C вы бы использовали sscanf () или, более точно, fscanf (), но эти функции считаются плохим стилем в C ++.
Я бы предложил что-то вроде этого:
struct SData
{
std::string sName;
std::string sGender;
int nDay;
int nMon;
int nYear;
int nHour;
int nMin;
int nSec;
};
bool ReadRecord(std::istream &istr, SData &data)
{
istr >> data.sName
>> data.sGender
>> data.nDay;
istr.ignore(1); // '/'
istr >> data.nMon;
istr.ignore(1); // '/'
istr >> data.nYear
>> data.nHour;
istr.ignore(1); // ':'
istr >> data.nMin;
istr.ignore(1); // ':'
istr >> data.nSec;
return istr.good();
}
Обновление
Следующий пример упрощает использование, исключая структуру
#include <iostream>
#include <fstream>
#include <string>
bool ReadRecord(std::istream &istr,
std::string &sName,
std::string &sGender,
int &nDay,
int &nMon,
int &nYear,
int &nHour,
int &nMin,
int &nSec)
{
istr >> sName
>> sGender
>> nDay;
istr.ignore(1); // '/'
istr >> nMon;
istr.ignore(1); // '/'
istr >> nYear
>> nHour;
istr.ignore(1); // ':'
istr >> nMin;
istr.ignore(1); // ':'
istr >> nSec;
return istr.good();
}
int main()
{
std::string sName0, sGender0, sName1, sGender1;
int nDay0, nMon0, nYear0, nDay1, nMon1, nYear1;
int nHour0, nMin0, nSec0, nHour1, nMin1, nSec1;
const char szFileName[] = "MyData.txt";
std::ifstream istr(szFileName);
if (!istr.is_open())
{
std::cerr << "Cannot open file\n";
return 1;
}
if (!ReadRecord(istr, sName0, sGender0, nDay0, nMon0, nYear0, nHour0, nMin0, nSec0))
{
std::cerr << "Cannot read file\n";
return 1;
}
if (!ReadRecord(istr, sName1, sGender1, nDay1, nMon1, nYear1, nHour1, nMin1, nSec1))
{
std::cerr << "Cannot read file\n";
return 1;
}
std::string sYounger;
if (nYear0 == nYear1)
{
if (nMon0 == nMon1)
{
if (nDay0 == nDay1)
{
if (nHour0 == nHour1)
{
if (nMin0 == nMin1)
{
if (nSec0 > nSec1)
{
sYounger = sName0;
}
else if (nSec0 < nSec1)
{
sYounger = sName1;
}
}
else if (nMin0 > nMin1)
{
sYounger = sName0;
}
else if (nMin0 < nMin1)
{
sYounger = sName1;
}
}
else if (nHour0 > nHour1)
{
sYounger = sName0;
}
else if (nHour0 < nHour1)
{
sYounger = sName1;
}
}
else if (nDay0 > nDay1)
{
sYounger = sName0;
}
else if (nDay0 < nDay1)
{
sYounger = sName1;
}
}
else if (nMon0 > nMon1)
{
sYounger = sName0;
}
else if (nMon0 < nMon1)
{
sYounger = sName1;
}
}
else if (nYear0 > nYear1)
{
sYounger = sName0;
}
else if (nYear0 < nYear1)
{
sYounger = sName1;
}
if (sYounger.empty())
{
std::cout << "The ages are the same\n";
}
else
{
std::cout << sYounger << "is younger\n";
}
return 0;
}