#include #include #include #include #include #include #include #include using namespace std; int main(int argc, char **argv) { if (argc != 2 && argc != 3) { cout << "Usage: " << argv[0] << " [number of answers]" << endl; return 1; } char *abbr = argv[1]; int abbrlen = strlen(abbr); transform(abbr, abbr+abbrlen, abbr, ::tolower); for (int i = 0; i < abbrlen; i++) { if (abbr[i] < 'a' || abbr[i] > 'z') { cout << "Abbreviation cannot contain '" << abbr[i] << "'!" << endl; return 1; } } struct timeval tv; gettimeofday(&tv, NULL); srand(1000000 * tv.tv_sec + tv.tv_usec); int numanswers = 1; if (argc == 3) { numanswers = strtol(argv[2], nullptr, 10); if (numanswers <= 0) return 0; } vector dict[26]; ifstream dictfile("/usr/share/dict/words"); string line; while (getline(dictfile, line)) { transform(line.begin(), line.end(), line.begin(), ::tolower); if (line[0] >= 'a' && line[0] <= 'z' && all_of(line.begin(), line.end(), ::islower)) dict[line[0] - 'a'].push_back(line); } while (numanswers --> 0) { for (int i = 0; i < abbrlen; i++) { if (i > 0) cout << ' '; size_t index = rand() % dict[abbr[i] - 'a'].size(); cout << dict[abbr[i] - 'a'][index]; } cout << '\n'; } cout.flush(); return 0; }