Answer:
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main()
{
cout << "Enter a 5-digit number: ";
string number;
cin >> number;
bool valid = regex_search(number, regex("^\\d{4}[02468]$"));
if (valid) {
valid = stoi(number.substr(0, 1)) + stoi(number.substr(1, 1))
< stoi(number.substr(3, 1)) + stoi(number.substr(4, 1));
}
cout << number << (valid ? " is valid" : " is invalid");
}
Step-by-step explanation:
Regular expressions can do all of your checking except for the sum of digits check. The checks are i.m.o. easiest if you don't treat the input as a number, but as a string with digits in it.
The regex means:
^ start of string
\d{4} exactly 4 digits
[02468] one of 0, 2, 4, 6 or 8 (this is what makes it even)
$ end of string