按字典序词频统计 最后总会出现一下莫名的段错误 求大神指点!

Vermouth0 发布于 2016/05/14 19:03
阅读 111
收藏 0
#include<stdio.h>
#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;
            }
        }
    }
}

加载中
返回顶部
顶部