wuwu

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 


typedef struct _link //定义结构体统计单词、和该单词个数

    char *data; 
    int num; 
    struct _link *next; 
}link; 


void bubble_sort(link *phead)
{
    link *p;//i 
    link *q;//j
    link *r;
    link temp; //temp


    for(p=phead;p;p=p->next)
        for(q=p->next;q;q=q->next)
        {
            if(strcmp(p->data,q->data)>0)
            {
                temp=*p;
                *p=*q;
                *q=temp;
                r=p->next;
                p->next=q->next;
                q->next=r;
            }
        }
}


void select_sort(link *phead)
{
  link *p;//i
  link *q;//j
  link *r;
  link temp; //temp
  link *temp1;
  for(p=phead;p;p=p->next)
  {
        *temp1=*p;
        for(q=p->next;q;q=q->next)
        {
            if(strcmp(q->data,temp1->data)<0)
                  *temp1=*q;
             if(temp1!=phead)
             {
                temp=*q;
                *q=*temp1;
                *temp1=temp;
             }
             r=p->next;
             p->next=q->next;
             q->next=r;
        }
    }
}


void wordcount(char *input,char *output)
{
    FILE *fp; 
    char word[1025]; 
    size_t pos=0; 
    int c; 
    int word_count=0;
    int row_count=0;
    link *head, *pnow, *ptmp; 


    ptmp=pnow=head=NULL; 
    input[strlen(input)]='\0';
    output[strlen(output)]='\0';


    if((fp=fopen(input, "r"))==NULL) //接收文件路径
    { 
        printf("Can't open %s! Please check it!!", input); 
        exit(1);
    } 
    while(!feof(fp)) 
    { 
        c=fgetc(fp); 
        if(c=='\n')
        {
           row_count++;
        }
        if((c>='a' && c<='z')|| (c>='A' && c<='Z')) 
        { 
            word[pos++]=c; //统计个数、识别单词
        } 
        else if(pos>0) 
        { 
            //printf("pos=%d\n",pos);
            //printf("word=%s\n",word);
            word_count++;//单词总数
            word[pos]=0; //将空格或者其他符号设置为0
            ptmp=head; 
            while(ptmp) //统计单词
            { 
                if(strcasecmp(word, ptmp->data)==0) 
                { 
                    ptmp->num++; 
                    break; 
                } 
                ptmp=ptmp->next; 
            } 
            if(ptmp==NULL) 
            { 
                ptmp=(link *)malloc(sizeof(link)); //申请一个结构体空间
         ptmp->data=(char *)malloc(pos); //申请单词存放空间
                strcpy(ptmp->data, word); 
                ptmp->num=1; 
                ptmp->next=NULL; 
                if(pnow) 
                { 
                    pnow->next=ptmp; 
                    pnow=ptmp; 
                } 
                else 
                { 
                    head=pnow=ptmp; 
                } 
            } 
            pos=0; 
        } 
    } 
    fclose(fp); 


    bubble_sort(head);
    //select_sort(head);


    if((fp=fopen(output, "w"))==NULL) 
    { 
        printf("Can't open %s to write. Please check your permission.\n", output); 
        exit(1);
    } 
    ptmp=head; 
    while(ptmp) 
    { 
        fprintf(fp, "%s\t:%d\n", ptmp->data, ptmp->num); 
        ptmp=ptmp->next; 
    } 
    fprintf(fp,"\n\n\n");
    fprintf(fp,"单词总数:%d\t总行数:%d\n",word_count,row_count);
    fclose(fp); 
}






int main(int argc, char* argv[]) 

    if(argc !=3) //编译参数
    { 
        printf("words inputfile outputfile\n"); 
        exit(1);
    } 
    wordcount(argv[1],argv[2]);
    return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值