#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;
}
#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;
}
1834

被折叠的 条评论
为什么被折叠?



