#include "Header.h" typedef struct { int char1; int char2; long count; } CharPair; int compare (const void * a, const void * b) { return ((*((CharPair *) b)).count - (*((CharPair *) a)).count ); } void printResult(const void * a) { int i; CharPair *pairs = (CharPair *) a; //print Report for(i = 0; i < NOut; i++) { printf("(%c,%-c) %-10d\n", (unsigned char)pairs[i].char1, (unsigned char)pairs[i].char2, pairs[i].count); } } void countPairs() { //char pair CharPair charPair[256][256]; unsigned char charBuffer[NMax]; int i, j, charRead; int firstChar, secondChar; //initilize array items to zero for(i = 0; i < 256; i++) { for(j = 0; j < 256; j++) { charPair[i][j].char1 = i; charPair[i][j].char2 = j; charPair[i][j].count = 0; } } //read the first bunch if((charRead = fread(charBuffer, sizeof(unsigned char), NMax, stdin)) != EOF) { firstChar = abs(charBuffer[0]); for(i =1; i < charRead; i++) { secondChar = abs(charBuffer[i]); charPair[firstChar][secondChar].count += 1; firstChar = secondChar; } } //read chars in bunches of NMax while(charRead = fread(charBuffer, sizeof(unsigned char), NMax, stdin)) { for(i =0; i < charRead; i++) { secondChar = abs(charBuffer[i]); charPair[firstChar][secondChar].count += 1; firstChar = secondChar; } } //sort array qsort (charPair, 65536, sizeof(CharPair), compare); //print result printResult(charPair); }