C言語は、ファイル内のすべての単語が表示された回数を読み出し、画面とファイルに出力する
2058 ワード
#include
#include
#include
typedef struct Sword{
char word[200];
int num;
struct Sword * next;
}Sword;
void add(Sword * Head,char * str);
void display(Sword * Head,FILE * fp);
void release(Sword * Head);
int main(void){
FILE * fp;
char filename [] ="D:\\codesoftware\\Dev_C\\C_code\\file.txt";//
char str[200]; //
Sword * Head;
Head = (Sword *)malloc(sizeof(Sword)); //
memset(Head,0,sizeof(Sword));
if((fp = fopen(filename,"r"))==NULL){ //
printf("Can not open file");
exit(0);
}
while(fscanf(fp,"%s",str) != EOF){ //
add(Head,str); //
}
fclose(fp); //
if((fp = fopen(filename,"a"))==NULL){ //
printf("can not open file");
exit(0);
}
display(Head,fp); //
fclose(fp); //
release(Head); //
return 0;
}
void add(Sword * Head,char * str){ //
Sword * tw;
Sword * p = Head;
while(1){
if(strcmp(p->word,str)==0){ //
p->num++; // ++
return;
}else{ //
if(p->next != NULL){
p = p->next;
}else{ //
tw = (Sword *)malloc(sizeof(Sword));//
memset(tw,0,sizeof(Sword));
sprintf(tw->word,"%s",str);//
tw->num++; // ++
p->next = tw; //p tw
return;
}
}
}
}
void display(Sword * Head,FILE * fp){ //
Sword * show;
for(show = Head->next;show != NULL;show = show->next){ //show
printf("%s %d
",show->word,show->num);
fprintf(fp,"%s %d
",show->word,show->num);
}
}
void release(Sword * Head){ //
Sword * tw;
Sword * pre = Head;
while(pre != NULL){ //
tw = pre->next; //tw next
free(pre); //
pre = tw;
}
}