#include #include #include using namespace std; const int max_num_els = 119; struct element { string symbol, name; double atwt; int atno; }; int read_table(element table[]) { ifstream fin("/home/www/class/een118/a3010b.txt"); if (fin.fail()) { cerr << "Can't open file\n"; exit(1); } table[0].symbol = "??"; table[0].name = "Does not exist"; table[0].atwt = 9999999999.9; table[0].atno = 0; for (int atno = 1; atno <= max_num_els; atno += 1) { fin >> table[atno].symbol; fin >> table[atno].name; fin >> table[atno].atwt; table[atno].atno = atno; if (fin.fail()) return atno - 1; } } element find(element table[], int last_el, string wanted) { for (int i = 1; i <= last_el; i += 1) { if (table[i].symbol == wanted || table[i].name == wanted) return table[i]; } cerr << "'" << wanted << "' not found\n"; return table[0]; } struct reader { string s; int pos; }; string get(reader & rdr) { string result = ""; while (rdr.s[rdr.pos] == ' ') rdr.pos += 1; if (rdr.s[rdr.pos] >= 'A' && rdr.s[rdr.pos] <= 'Z') { result += rdr.s[rdr.pos]; rdr.pos += 1; if (rdr.s[rdr.pos] >= 'a' && rdr.s[rdr.pos] <= 'z') { result += rdr.s[rdr.pos]; rdr.pos += 1; } } else if (rdr.s[rdr.pos] >= '0' && rdr.s[rdr.pos] <= '9') { while (rdr.s[rdr.pos] >= '0' && rdr.s[rdr.pos] <= '9') { result += rdr.s[rdr.pos]; rdr.pos += 1; } } else { cerr << "Bad character '" << rdr.s[rdr.pos] << "' in input\n"; result += rdr.s[rdr.pos]; } return result; } int main() { element PT[max_num_els-1]; int n = read_table(PT); cout << "read " << n << " elements\n"; reader R; R.pos = 0; cout << "Enter a formula: "; getline(cin, R.s); while (true) { string query = get(R); cout << "(symbol is '" << query << "')\n"; if (query == ".") break; if (query[0]>='a' && query[0]<='z') query[0] = query[0] - ('a' - 'A'); element X = find(PT, n, query); cout << X.atno << " " << X.symbol << " " << X.name << " " << X.atwt << "\n"; } }