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