void readPapers(int papers, Scanner scanIn) { int paper; for (paper = 1; paper <= papers; paper++) { String paperAuthors; paperAuthors = scanIn.nextLine(); #ifdef DEBUG printf("paper #%d %s\n", paper, paperAuthors); #endif Author authors[] = new Author[Author.MAX_PAPER_AUTHORS]; int authorsIndex = 0; Pattern p = Pattern.compile("\\s*(\\S*)[,]\\s*(\\S*)[,:]"); Matcher m = p.matcher(paperAuthors); while (m.find()) { String lname = m.group(1); String fname = m.group(2); if (debug) { printf("\t'%s' => '%s', '%s'\n", paperAuthors, lname, fname); } authors[authorsIndex] = Author.find(fname, lname); if (authors[authorsIndex] == null) { if (lname.length() == 0 || fname.length() == 0) { continue; } authors[authorsIndex] = new Author(fname, lname); } authorsIndex++; } for (int i = 0; i < authorsIndex; i++) { for (int j = 0; j < authorsIndex; j++) { authors[i].publicouCom(authors[j]); } } } }
int main(int argc, char** varg) { if(argc < 4)//this is how to use this { cerr << "usage: cmd file1 file2 output" << endl; return 1; } //these are for holding each files occurances of strings, or lack thereof set<WORD> file1, file2; //Java like Scanner object Scanner scan; //open the file given as argument 1 scan.openFile(varg[1]); //to the first file 'file1' we will add each string that is in there //for the first occurance we set count at 1, and increment as needed //to the second file 'file2' we will add each string from 'file1' //and set the count to 0 while(scan.hasMoreData()) { ScanLine line; line.openString(scan.nextLine()); while(line.hasMoreData()) { string nxt_token = line.next(); nxt_token = Utils::trimBlanks(nxt_token); //add elements to 'file2' once with count 0 if(file2.count(nxt_token) == 0) { WORD f_two; f_two.token = nxt_token; f_two.count = 0; file2.insert(f_two); } //add first occurance to file1 with count 1 if(file1.count(nxt_token) == 0) { WORD f_one; f_one.token = nxt_token; f_one.count = 1; file1.insert(f_one); } else { //replace the word with a word of equal token and +1 count set<WORD>::iterator it = file1.find(WORD(nxt_token)); int ct = it->count; ct++; file1.erase(it); WORD replace; replace.token = nxt_token; replace.count = ct; file1.insert(replace); } } } scan.close();//close file1 cout << "++++++++++++++++++++++++++++++++++++++++++++++++" << endl; scan.openFile(varg[2]);//open file2 //to the second file 'file2' we will add each word we find, or //increment as needed if it occurred in the first file //if a string occurs in 'file2' that doesn't exist in 'file1' //we will add any token to 'file1' list from 'file2' list and set count to 0 while(scan.hasMoreData()) { ScanLine line; line.openString(scan.nextLine()); while(line.hasMoreData()) { string nxt_token = line.next(); nxt_token = Utils::trimBlanks(nxt_token); //if the word doesn't already exist in 'file1' add it with count 0 if(file1.count(nxt_token) == 0) { WORD f_two; f_two.token = nxt_token; f_two.count = 0; file1.insert(f_two); } //add the first occurance of a word to 'file2' with count 1 if(file2.count(nxt_token) == 0) { WORD f_one; f_one.token = nxt_token; f_one.count = 1; file2.insert(f_one); } else { //replace the word with a word of equal token and +1 count set<WORD>::iterator it = file2.find(WORD(nxt_token)); int ct = it->count; ct++; file2.erase(it); WORD replace; replace.token = nxt_token; replace.count = ct; file2.insert(replace); } } } scan.close(); ofstream outStream; Utils::FileOpen(outStream, varg[3]);//open the output file //write to it... outStream << Utils::Format(compare(file1, file2), 2, 6) << endl; Utils::FileClose(outStream);//close it }
void UvaErdo() { int scenarios, papers = 0, names = 0; int scenario; Scanner *scanIn = new Scanner(); String s = scanIn->nextLine(); scenarios = Integer->parseInt(s->trim()); for (scenario = 1; scenario <= scenarios; scenario++) { printf("Scenario %d\n", scenario); String nextLine = scanIn->nextLine(); String s2[] = nextLine->split(" "); int i = 0; for (; s2[i] != null; i++) { try { papers = Integer.parseInt(s2[i].trim()); #ifdef DEBUG printf("\tConverted '%s' to %d\n", s2[i].trim(), papers); #endif break; } catch (NumberFormatException e) { } } i++; for (; i < s2.length; i++) { try { names = Integer.parseInt(s2[i].trim()); #ifdef DEBUG printf("\tConverted '%s' to %d\n", s2[i].trim(), names); #endif break; } catch (NumberFormatException e) { } } #ifdef DEBUG printf("\tConverted '%s' to %d papers and %d names\n", nextLine, papers, names); #endif readPapers(papers, scanIn); #ifdef DEBUG printf("Scenario %d\n", scenario); #endif List<Entry<String, Author>> theMap = new ArrayList<Map.Entry<String, Author>>(names); Set<Author> targets = new TreeSet<Author>(); readCases(names, scanIn, theMap, targets); if (Author.erdosPtr != null) { Author.erdosPtr.process(targets); #ifdef DEBUG printf("Author::erdosPtr not null\n"); #endif } for (Entry<String, Author> it : theMap) { Author a = it.getValue(); String bigname = it.getKey(); if (a == null) { printf("%s infinity\n", bigname); } else { int d = a.depht; if (d <= 0 && Author.erdosPtr != a) { printf("%s, %s infinity\n", a.lname, a.fname); } else { printf("%s, %s %d\n", a.lname, a.fname, d); } } } theMap.clear(); Author.freeMemory(); } }