#include <fstream>
#include <regex>
#include <string>
#include <iostream>
#include <cstdlib>
int main(int argc, char **argv) {
using namespace std;
if (argc <= 1) {
cerr << "File name required" << endl;
return -1;
}
ifstream stream(argv[1], ios::in);
if (!stream.is_open()) {
cerr << "Could not open file " << argv[1] << endl;
return -1;
}
regex rx("(\\w+):(\\d+)\\$");
int book_counter = 0;
string line;
while (getline(stream, line)) {
smatch results;
if (regex_search(line, results, rx)) {
auto book_name = results.str(1);
auto book_count = atoi(results.str(2).data());
book_counter += book_count;
cout << "Entry added: " << book_name << ", count " << book_count << endl;
}
}
cout << "Total books: " << book_counter << endl;
return 0;
}
I2luY2x1ZGUgPGZzdHJlYW0+CiNpbmNsdWRlIDxyZWdleD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgICAKICAgIGlmIChhcmdjIDw9IDEpIHsKICAgICAgICBjZXJyIDw8ICJGaWxlIG5hbWUgcmVxdWlyZWQiIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSAKICAgIAogICAgaWZzdHJlYW0gc3RyZWFtKGFyZ3ZbMV0sIGlvczo6aW4pOwogICAgaWYgKCFzdHJlYW0uaXNfb3BlbigpKSB7CiAgICAgICAgY2VyciA8PCAiQ291bGQgbm90IG9wZW4gZmlsZSAiIDw8IGFyZ3ZbMV0gPDwgZW5kbDsKICAgICAgICByZXR1cm4gLTE7CiAgICB9CiAgICAKICAgIHJlZ2V4IHJ4KCIoXFx3Kyk6KFxcZCspXFwkIik7CiAgICBpbnQgYm9va19jb3VudGVyID0gMDsKICAgIHN0cmluZyBsaW5lOwogICAgd2hpbGUgKGdldGxpbmUoc3RyZWFtLCBsaW5lKSkgewogICAgICAgIHNtYXRjaCByZXN1bHRzOwogICAgICAgIGlmIChyZWdleF9zZWFyY2gobGluZSwgcmVzdWx0cywgcngpKSB7CiAgICAgICAgICAgIGF1dG8gYm9va19uYW1lID0gcmVzdWx0cy5zdHIoMSk7CiAgICAgICAgICAgIGF1dG8gYm9va19jb3VudCA9IGF0b2kocmVzdWx0cy5zdHIoMikuZGF0YSgpKTsKICAgICAgICAgICAgYm9va19jb3VudGVyICs9IGJvb2tfY291bnQ7CiAgICAgICAgICAgIAogICAgICAgICAgICBjb3V0IDw8ICJFbnRyeSBhZGRlZDogIiA8PCBib29rX25hbWUgPDwgIiwgY291bnQgIiA8PCBib29rX2NvdW50IDw8IGVuZGw7CiAgICAgICAgfQogICAgfQogICAgCiAgICBjb3V0IDw8ICJUb3RhbCBib29rczogIiA8PCBib29rX2NvdW50ZXIgPDwgZW5kbDsKICAgIAogICAgcmV0dXJuIDA7Cn0K