#include<stdio.h>#include<string.h>#include<ctype.h>struct key { char *keyword; int count;};struct key tab[] = { { "art",0 },{ "hos",0 } ,{ "leg",0 },{ "lie",0 },{ "math",0 },{ "sci",0 } };#define MAX 100#define NKEYS (sizeof tab/sizeof (struct key))int getword(char word[], int lim) { word[0]='v'; char c; int getch(void); void ungetch(char); char w[MAX]; int i = 0; int j; while (isspace(c = getch())); if (c != EOF) w[i++] = c; if (!isalpha(c)) { w[i] = '\0'; return c; } for (j=0; --lim > 0; j++) { if (!isalpha(w[j++] = getch())) { ungetch(w[j-1]); break; } } word = w; return word[0];}int binsearch(char *word, struct key tab[], int n) { int cond, low, high, mid; low = 0; high = n - 1; while (low <= high) { mid = (low + high) / 2; if ((cond = strcmp(word, tab[mid].keyword)) < 0) high = mid - 1; else if (cond > 0) low = mid + 1; else return mid; } return -1;}void swap(int i, int j, struct key tab[]) { int temp; temp = tab[i].count; tab[i].count = tab[j].count; tab[j].count = temp;}void qsort(struct key tab[], int left, int right) { int i, last; last = left; i = left + 1; if (left >= right) return; swap(left, (left + right) / 2, tab); last = left; for (i = left + 1; i < right; i++) { if (tab[i].count < tab[left].count) swap(++last, i, tab); } swap(left, last, tab); qsort(tab, left, last - 1); qsort(tab, last + 1, right);}int main() { int n; char word[MAX] = "a"; while (getword(word, MAX) != EOF) { if (isalpha(word[0])) if (n = binsearch(word, tab, NKEYS) >= 0) tab[n].count++; } for (n = 0; n < NKEYS; n++) printf("选择%s的人数为%d", tab[n].keyword, tab[n].count); qsort(tab, 0, NKEYS - 1); printf("人数最多的学院有%d人", tab[NKEYS - 1].count); system("pause"); return 0;}调试的时候到getword函数的 if (!isalpha(w[j++] = getch()))就说触发断点了
目前暂无任何回答
- 0 回答
- 0 关注
- 1057 浏览
添加回答
举报
0/150
提交
取消