#include #include #include #include const boost::regex e("\\A(\\d{3,4})[- ]?(\\d{4})[- ]?(\\d{4})[- ]?(\\d{4})\\z"); const std::string machine_format("\\1\\2\\3\\4"); const std::string human_format("\\1-\\2-\\3-\\4"); std::string machine_readable_card_number(const std::string& s) { std::string result = regex_merge(s, e, machine_format, boost::match_default | boost::format_sed | boost::format_no_copy); return result; } std::string human_readable_card_number(const std::string& s) { std::string result = regex_merge(s, e, human_format, boost::match_default | boost::format_sed | boost::format_no_copy); return result; } bool validate_card_format(const std::string& s) { return regex_match(s, e); } int main(int argc, char * argv[]) { std::string input; while(1) { std::cout<<"input a credit card number: "; std::cin>>input; if(validate_card_format(input)) { std::cout<<"machine readable card number: "<