2013年5月26日日曜日
覆面算の辞書eng2.dicが重複してたので重複をなくすプログラムlist6.c
$ gcc -o list6 list6.c
$ ./list6 eng2.dic eng2.dic
argv[1]=ロードするファイル
argv[2]=セーブするファイル
先ほどアップしたeng2.dicはa〜cまでの途中で
zまで入れたらどうなるんだろう
重複するのでlist6でシェイプアップ&アルファベットにソート
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 200
#define EEOF 0xff
struct line{
char text[MAX];
long count;
struct line *next;
};
struct line *stt,*start,*last,*gcdata,*info,*gc2;
struct line *shojun(struct line *);
struct line *node_create();
main(argc,argv)
int argc;
char *argv[];
{
char p,fname[40];
FILE *fp,*fs;
long pos=0,gyo=1;
printf("MAX=%d \n",MAX);
if(argc<3){
printf("No File.\n\n");
printf("./list6 [Load File] [Save File]\n");
printf("./list6 abc.txt abc.txt\n");
exit(1);
}
fp=fopen(argv[1],"r");
if(fp==NULL){
printf("cannot open file %s \n",argv[1]);
exit(1);
}
printf("file name %s \n",argv[1]);
gcdata=start=gc2=node_create();
while( (p=getc(fp)) != EEOF){
if(p=='\n'){
gcdata->text[pos]='\0';
gcdata->count=1;
gcdata->next =node_create();
gc2 =gcdata;
gcdata =gcdata->next;
pos=0;
}
else{
if(pos>=MAX) break;
gcdata->text[pos++]=p;
}
}
gc2->next=NULL;;
fclose(fp);
stt=start;
info=start;
while(info){
start =info->next;
info->next=NULL;
stt =shojun(info);
info =start;
}
fs=fopen(argv[2],"w");
if(fs==NULL){
printf("cannot open file %s \n",argv[2]);
exit(1);
}
printf("file name %s \n",argv[2]);
info=stt;
/* info=info->next;*/
while(info){
fprintf(fs,"%s\n",info->text);
info=info->next;
}
fclose(fs);
}
struct line *node_create()
{
struct line *from;
int size;
size=sizeof(struct line);
from=(struct line *)malloc(size);
if(!from){
printf("out of memory \n");
exit(1);
}
from->next=NULL;
return from;
}
struct line *shojun(temp)
struct line *temp;
{
struct line *old;
struct line *now;
now=stt;
old=NULL;
if(!last){
temp->next=NULL;
last =temp;
return temp;
}
while(now){
if(strcmp(now->text,temp->text) == 0){
now->count++;
return stt;
}
if(strcmp(now->text,temp->text) < 0){
old=now;
now=now->next;
}
else{
if(old){
old ->next=temp;
temp->next=now;
return stt;
}
else{
temp->next=now;
return temp;
}
}
}
last->next=temp;
temp->next=NULL;
last =temp;
return stt;
}
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿