#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()))就说触发断点了
相关分类