//Написать программу, считывающую символьный файл в динамическую память //целиком пословно, формируя массив указателей на слова, //Вывести слово, которое встречается в файле чаще всего #include #define MAX_STR 32 #define MAX_ARR 512 bool addOrInc(char *string, char **arrOfStrings, int *n); bool compare(char *a, char *b); int max(int arr[], int size); //не написан int main(){ int ch; int size = 0; int n[MAX_ARR]; char *s = malloc(sizeof(char)*MAX_STR); char *strs[MAX_ARR]; while(size < MAX_ARR) n[size++] = 0; while(size >= 0) strs[size--] = NULL; while((ch = getch()) != EOF){ int i = 0; while(ch != ' ' && ch != '.' && ch != '(' && ch != ')'){ s[i++] = ch; ch = getch(); }s[i] = 0; size += addOrInc(s, strs, n); } printf("%s\n", strs[max(n, size)]); //ещё не плохо было бы разделигировать память, но это //пусть делает Денис, то есть, я имел ввиду, Никита =) return 0; } bool addOrInc(char *string, char *arrOfStrings[], int *n){ for(int i = 0; i < MAX_ARR; i++){ if(compare(string, arrOfStrings[i])){ n[i]++; return false; }else if(arrOfStrings[i] == NULL){ n[i]++; arrOfStrings[i] = s; s = malloc(sizeof(char)*MAX_STR); return true; } } } bool compare(char *a, char *b){ int i = 0; while(a[i] && a[i] == b[i]) i++; return a[i] == b[i]; }