#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAXSIZE 20
typedef struct node{
int count;
char s[MAXSIZE];
struct node *next;
}list,*linkP;
FILE *fp;
linkP L = (linkP)malloc(sizeof(list));
void deal(char temp[],char line[]);
void search(char temp[],linkP L);
void PrintList(linkP L);
void sort(linkP L);
int main(void){
fp = fopen("article.txt","r");
L->next = NULL;
char line[MAXSIZE];
char temp[MAXSIZE];
memset(temp,0,MAXSIZE);
while(fgets(line,1024,fp)!=NULL){
deal(temp,line);
}
sort(L);
PrintList(L);
fclose(fp);
return 0;
}
void deal(char temp[],char line[]){
int i,k=0;
char ch;
for(i=0;i<strlen(line);i++){
if(line[i]>='A'&&line[i]<='Z'){
ch = tolower(line[i]);
}
else{
ch = line[i];
}
if(ch>='a'&&ch<='z'){
temp[k] = ch;
k++;
}
else{
if(temp[0]==0){
continue;
}
else{
search(temp,L);
memset(temp,0,MAXSIZE);
k = 0;
continue;
}
}
}
}
void search(char temp[],linkP L){
linkP p,q;
int flag = 0;
p = L;
while(p){
if(strcmp(temp,p->s)==0){
p->count++;
flag = 1;
break;
}
p = p->next;
}
if(flag==0){
p = L;
while(p->next!=NULL){
p = p->next;
}
q = (linkP)malloc(sizeof(list));
strcpy(q->s,temp);
q->next = NULL;
q->count = 1;
p->next = q;
p = q;
}
}
void PrintList(linkP L){
linkP p;
p = L->next;
while(p){
printf("%s %d\n",p->s,p->count);
p = p->next;
}
}
void sort(linkP L){
linkP p,q;
char s[MAXSIZE];
int temp;
for(p=L;p;p=p->next){
for(q=p;q;q=q->next){
if(strcmp(p->s,q->s)>0){
strcpy(s,p->s);
strcpy(p->s,q->s);
strcpy(q->s,s);
temp = p->count;
p->count = q->count;
q->count = temp;
}
}
}
}