/* SI 335 Spring 2012 * Project 2 * This program checks whether a given file is properly formatted * for input. * The file in question should be piped/redirected to standard in. */ #include <cstdlib> #include <cctype> #include <iostream> #include <string> #include <bitset> using namespace std; void err (const char* msg) { cout << msg << endl; exit(1); } int main() { int k, n; string name; int num; if (! (cin >> k)) err ("Expected k, got error"); if (k <= 0) err("k must be positive"); for (int i=0; i<k; ++i) { if (!(cin >> name)) err("Expected service name, got error"); if (isdigit(name[0])) err("Expected service name, got number"); } if (!(cin >> n)) err ("Expected n, got error"); if (n <= 0) err("n must be positive"); bool** checks = new bool*[k]; for (int i=0; i<k; ++i) { checks[i] = new bool[n]; for (int j=0; j<n; ++j) checks[i][j] = false; } for (int i=0; i<n; ++i) { if (!(cin >> name)) err("Expected name, got error"); if (isdigit(name[0])) err("Expected name, got number"); for (int j=0; j<k; ++j) { if (! (cin >> num)) err("Expected rank, got error"); if (num <= 0) err("Ranking number must be positive"); if (num > n) err("Ranking number must be at most n"); if (checks[j][num-1]) err("Duplicate ranking"); checks[j][num-1] = true; } } if (cin >> name) err("Extra stuff at the end"); for (int i=0; i<k; ++i) { int j=0; for (; j < n && checks[i][j]; ++j); if (j < n) err("Missing a ranking"); } cout << "PASS" << endl; return 0; }