C语言——从字符串中统计单词的频数
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct node{
char word[20];
int count;
struct node* next;
}node;
typedef node* LinkList;
LinkList InitList();
void GetWord(char *s,LinkList head);
void WordToLinkList(LinkList head,char* s);
void PrintList(LinkList head);
int main(){
char str[10000]={'\0'};
char temp[1000];
char path[] = "number.in";
FILE* in = fopen(path,"r");
if(!in){
printf("File can't be opened!\n");
exit(0);
}
while(fgets(temp,sizeof(temp),in)!=NULL){
if(temp[strlen(temp)-1] == '\n')
temp[strlen(temp)-1] = '\0';
strcat(str,temp);
}
LinkList head = InitList();
GetWord(str,head);
PrintList(head);
fclose(in);
system("pause");
return 0;
}
LinkList InitList(){
LinkList head = (LinkList)malloc(sizeof(node));
head->word[0] = '\0';
head->next = NULL;
return head;
}
void GetWord(char *s,LinkList head){
char *p;
char delim[] = " ,.";
p = strtok(s,delim);
while(p!=NULL){
WordToLinkList(head,p);
p = strtok(NULL,delim);
}
}
void WordToLinkList(LinkList head,char* s){
LinkList q = head->next;
int isExit = 0;
while(q){
if(strcmp(q->word,s)==0){
q->count++;
isExit = 1;
break;
}
q = q->next;
}
if(!isExit){
LinkList temp = (LinkList)malloc(sizeof(node));
strcpy(temp->word,s);
temp->count=1;
temp->next = head->next;
head->next = temp;
}
}
void PrintList(LinkList head){
LinkList p = head->next;
while(p!=NULL){
printf("%s:%d\n",p->word,p->count);
p = p->next;
}
}