永发信息网

高分用C语言做个游程编码程序,下面我解释具体意思,高手来

答案:1  悬赏:60  手机版
解决时间 2021-03-29 19:49
高分用C语言做个游程编码程序,下面我解释具体意思,高手来
最佳答案
#include 
#include 
#include 
#include 

#define MAXLINE 1024
#define DIM     ","

typedef struct STRLINK 
{
    int v;
    int t;
    struct STRLINK *next;
} LINK;

static LINK *head = NULL;

static int freelink()
{
    LINK *tmp = NULL;

    if (head==NULL) return 0;

    while (head->next) {
        tmp = head->next;
        free(head);
        head = tmp;
    }

    free(head);
    return 0;
}

static int inode(int v)
{
    LINK *tmp, *newlink;
    tmp = head;

    newlink = (LINK*)malloc(sizeof(LINK));
    if (newlink==NULL)  return -1;
    newlink->v = v;
    newlink->t = 1;
    newlink->next = NULL;

    if (tmp==NULL) {
        head = newlink;
        return 0;
    }

    while (tmp->next!=NULL) {
        if (tmp->v==v) {
            tmp->t++;
            return 0;
        }
        tmp = tmp->next;
    }

    if (tmp->v==v) {
        tmp->t++;
        return 0;
    } else {
        tmp->next = newlink;
        return 0;
    }
}

static int prt2file(FILE *fout, int linenum)
{
    LINK *tmp = head;
    if (head==NULL) return 0;

    while (tmp->next) {
        fprintf(fout, "(%d,%d,%d),", tmp->v, tmp->t, linenum);
        tmp = tmp->next;
    }

    fprintf(fout, "(%d,%d,%d)
", tmp->v, tmp->t, linenum);

    return 0;
}

int main(int argc, char *argv[])
{
    FILE *fin, *fout;
    char line[MAXLINE+1], *str;

    int linenum, v;
    
    if (argc!=3) {
        printf("USAGE: %s 输入文件 输出文件
", argv[0]);
    }

    fin = fopen(argv[1], "r");
    if (fin==NULL) {
        printf("input file[%s] can not open!
", argv[1]);
        return -1;
    }
    fout = fopen(argv[2], "a+");
    if (fout==NULL) {
        printf("output file[%s] can not open!
", argv[2]);
        fclose(fin);
        return -1;
    }
    
    
    memset(line, 0, sizeof(line));
    linenum = 0;
    while (fgets(line, MAXLINE, fin)!=NULL) {
        ++linenum;
        freelink();
        str = strtok(line, DIM);
        if (str==NULL)  break;
        v = atoi(str);
        inode(v);
        while((str=strtok(NULL, DIM))!=NULL) 
        {
            v = atoi(str);
            inode(v);
        }
        prt2file(fout, linenum);
    }
    
    fclose(fin);
    fclose(fout);
    return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么新手机打王者荣耀会走走就自己停了?
括号-16-50+3又2/5÷括号-2
简要论述对ORM模式的理解,并简述ThinkPHP中
重阳节的来历是什么?有什么从古至今流传下来
梦幻诛仙手游哪个门派后期好 职业怎么选
国庆自驾游黄州出发去福建堵车吗
手机屏幕裂了,估计换一个原装屏要多少钱呐
山东省聊城市到重庆江津区有多少公里
如何擅长数学和科学
新卡罗拉1.2t时速可以开多少?
屈原生平事迹400字
药学本科可以考中药主管药师吗需要什么报考条
单选题关于富兰克林的“风筝实验”,下列说法
男生怎么看待单纯的女生
求一部电影的名字,内容是一个女人用一部坏掉
推荐资讯
物流学了可以出来干嘛
北京14.18开点终点站长春21.02到点运行时间
我是1.8米鱼缸 宽48 两个300W加热棒 两个循环
婆婆把鸡蛋苹果藏起来不让怀孕的儿媳吃,怎么
自考本科有学士学位证书吗
sketolene驱蚊液有毒吗
歌曲,我家的隔壁住着一小妹
二十个1×20个9等于多少
同一建筑,两种完全不同的基础形式
sonyz5支不支持中国移动4g
厨房处在五鬼的位置如何化解呢?
家里养了两只佛蓝鳌虾,必须放底砂吗,两只一
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?