Man kunne starte med noget i stil med:
#include <iostream>
#include <sstream>
#include <string>
bool ToUInt(unsigned int &aNr, const std::string &aStr)
{
std::stringstream ss(aStr);
return ss >> aNr;
}
void GetCpr(std::string &aCpr)
{
while(true)
{
std::cout << "Indtast CPR nummer: ";
std::cout.flush();
std::getline(std::cin, aCpr);
unsigned int T;
if(aCpr.size() == 11 &&
ToUInt(T, aCpr.substr(0, 2)) &&
T <= 31 &&
ToUInt(T, aCpr.substr(2, 2)) &&
T <= 12 &&
ToUInt(T, aCpr.substr(4, 2)) &&
aCpr[6] == '-' &&
ToUInt(T, aCpr.substr(7)))
{
return;
}
}
}
int main()
{
std::string CPR;
GetCpr(CPR);
std::cout << CPR << std::endl;
}
Nummeret skal indtasts som ddmmyy-nnnn
Så kunne man tilføje check for om der bliver tastet 30 februar osv.
Så vidt jeg ved er der nogle regler for hvordan de sidste 4 cifre skal se ud.
Standard C og C++ har ikke reg. exp., nogle kompilere har. Jeg har også en lille reg. exp class på min hjemmeside.