| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2681 人关注过本帖
标题:求助!真的是连头都不会开!
只看楼主 加入收藏
hllSaturn
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2015-12-20
结帖率:62.5%
收藏
已结贴  问题点数:20 回复次数:8 
求助!真的是连头都不会开!
实验输入数据见文件fun.topic.txt,该文件请用EditPlus等文本软件打开查看其中的内容,里面每一行表示基因的一个功能链,功能用功能编码表示,中间用符号’/’隔开,功能链中,越排在后面的功能,就越具体。例如某行数据为“01/05/03/06/07/02/02”,那么可以知道,该功能链最顶级的功能为01,05为其子功能,而01/05/又是05的子功能。
编程实现:请将funtopic.txt中每一行看成是一个功能体,将这些数据读入数组,数组中元素就是这些功能体,那么数组的下标就是功能体的编号了。然后,另外在将功能体之间的父子关系找出来保存到另一个二维数组中。第一维表示父亲,第二维表示儿子,其值都用编号表示。
01
01/01
01/02
01/03
01/04
01/05
01/06
01/07
01/08
01/20
01/25
01/01/03
01/01/05
01/01/06
01/01/09
01/01/11
程序代码:
#include<stdio.h>
main()
{
   int p,q,i,j,k;
   char a[9999];
   char m[999][999]
    FILE *fp;
    fp=fopen(fun.topics.txt, r);
    for(i=0;fscanf(fp,"%d",a+i)!=EOF;i++);   //从输入文件连续读取整数到数组a
    for(i=0;i<9999;i++)
        {
         for(j=0;j<9999;j++)
             k=strlen(a[i]);
             if()
        }
}
写到这就不会了~ 如何取最后一个/前的字符和其他数组比较?、



搜索更多相关主题的帖子: 元素 软件 
2016-09-14 11:04
hllSaturn
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2015-12-20
收藏
得分:0 
数据有很多~~
01
01/01
01/02
01/03
01/04
01/05
01/06
01/07
01/08
01/20
01/25
01/01/03
01/01/05
01/01/06
01/01/09
01/01/11
01/01/13
01/02/02
01/02/03
01/02/05
01/02/07
01/03/01
01/03/04
01/03/07
01/03/10
01/03/13
01/03/16
01/04/04
01/05/02
01/05/03
01/05/05
01/05/06
01/05/07
01/05/08
01/05/09
01/05/10
01/05/11
01/05/12
01/05/13
01/05/25
01/06/02
01/06/05
01/06/06
01/06/10
01/07/01
01/07/03
01/07/04
01/07/07
01/08/01
01/08/02
01/08/03
01/08/04
01/20/01
01/20/03
01/20/05
01/20/07
01/20/09
01/20/13
01/20/15
01/20/17
01/20/19
01/20/21
01/20/23
01/20/25
01/20/27
01/20/29
01/20/31
01/20/33
01/20/35
01/20/36
01/20/37
01/20/38
01/20/70
01/25/01
01/25/03
01/25/05
01/25/07
01/25/09
01/25/11
01/01/03/01
01/01/03/02
01/01/03/03
01/01/03/04
01/01/03/05
01/01/05/01
01/01/05/02
01/01/05/03
01/01/06/01
01/01/06/02
01/01/06/04
01/01/06/05
01/01/06/06
01/01/09/01
01/01/09/02
01/01/09/03
01/01/09/04
01/01/09/05
01/01/09/06
01/01/09/07
01/01/11/01
01/01/11/02
01/01/11/03
01/01/11/04
01/01/11/06
01/01/11/07
01/02/02/01
01/02/02/02
01/02/02/03
01/02/02/05
01/02/02/06
01/02/02/07
01/02/02/09
01/02/03/01
01/02/03/03
01/02/03/04
01/02/03/05
01/02/03/06
01/02/07/01
01/02/07/03
01/02/07/05
01/03/01/01
01/03/01/03
01/03/04/01
01/03/04/03
01/03/16/01
01/03/16/03
01/05/02/01
01/05/02/04
01/05/02/07
01/05/03/01
01/05/03/02
01/05/03/03
01/05/03/04
01/05/03/05
01/05/03/06
01/05/05/04
01/05/05/07
01/05/06/04
01/05/06/07
01/05/07/04
01/05/07/07
01/05/08/04
01/05/08/07
01/05/09/04
01/05/09/07
01/05/10/04
01/05/10/07
01/05/11/04
01/05/11/07
01/05/12/01
01/05/12/03
01/05/12/05
01/05/12/07
01/05/13/01
01/05/13/03
01/06/02/01
01/06/02/02
01/06/02/03
01/06/06/01
01/06/06/03
01/06/06/05
01/06/06/07
01/06/06/09
01/06/06/11
01/06/06/13
01/06/06/15
01/20/01/01
01/20/01/03
01/20/01/05
01/20/01/07
01/20/01/09
01/20/05/01
01/20/05/03
01/20/05/05
01/20/05/07
01/20/05/09
01/20/05/11
01/20/15/01
01/20/15/03
01/20/17/01
01/20/17/03
01/20/17/05
01/20/17/07
01/20/17/09
01/20/19/01
01/20/19/03
01/20/19/05
01/20/35/01
01/20/35/02
01/20/35/03
01/20/37/01
01/20/37/03
01/20/37/05
01/25/01/01
01/25/01/02
01/25/01/03
01/01/03/01/01
01/01/03/01/02
01/01/03/02/01
01/01/03/02/02
01/01/03/03/01
01/01/03/03/02
01/01/03/04/01
01/01/03/04/02
01/01/03/05/01
01/01/03/05/02
01/01/05/01/01
01/01/05/01/02
01/01/05/02/01
01/01/05/02/02
01/01/06/01/01
01/01/06/01/02
01/01/06/02/01
01/01/06/02/02
01/01/06/04/01
01/01/06/04/02
01/01/06/05/01
01/01/06/05/02
01/01/06/06/01
01/01/06/06/02
01/01/09/01/01
01/01/09/01/02
01/01/09/02/01
01/01/09/02/02
01/01/09/03/01
01/01/09/03/02
01/01/09/04/01
01/01/09/04/02
01/01/09/05/01
01/01/09/05/02
01/01/09/06/01
01/01/09/06/02
01/01/09/07/01
01/01/09/07/02
01/01/11/01/01
01/01/11/01/02
2016-09-14 11:04
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:20 

“01/05/03/06/07/02/02”,那么可以知道,该功能链最顶级的功能为01,05为其子功能,而01/05/又是05的子功能。
01/05/...  05是01的子功能,这我可以理解,但是01、05怎么又是05的子功能了?

另外“01/01/11/01/02”又是什么意思?


---------------
是不是就像字符串一样,看每行字符串与其他行的字符串是否存在包容关系?比如说你在一楼给出的那部分测试数据,01就是其他所有行的子功能?
如果题意确实如我所猜测的。那么第一,你不应该建立char[],而是需要字符串数组,但是由于数据庞大,所以你最好是用malloc之类的函数动态申请空间来保存字符串。具体实现就是char*a[MAXSIZE]//建立一个指针数组,然后每轮读数据以后malloc一段空间保存字符串,然后把字符串的指针保存到a【i】.

2.你自己写一个字符串比较函数。专门处理匹配问题。
-----------------------------------就这个方法而言,没用到任何算法、所以复杂度比较高。(百度一下,做这类字符串匹配问题的算法题应该不少)


φ(゜▽゜*)♪
2016-09-14 18:38
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
还有一种解决方案,不过需要确认功能编号是在一个比较小的范围比如01-99.(在功能编号范围较小,数据量较大的情况下这个方案效率会比较高。)
这样我们就可以建立一个树的结构。每一个功能链有几个编号他就在这个树上的第几层,这个功能链变成了树上的一条路径。对每一个功能链取其在这棵树上的最后一个结点做标记,记录他是我们读入的第几个数字。
后续读入的每一个功能链如果经过了带有这个标记的结点,那么就可以等记这个标记所指示的结点为它本身的父节点之一(写在二维数组中)
如果这个功能链本身在创建的时候就经过了别的带标记的结点,处理方式同上。

这个解决方案的原理来自“哈夫曼编码”,对于每一个编码方案而言,每一个编码都必须是互质的,任何一个编码都不可以是其他编码的前导。



[此贴子已经被作者于2016-9-15 13:48编辑过]


φ(゜▽゜*)♪
2016-09-15 13:45
hllSaturn
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2015-12-20
收藏
得分:0 
回复 3楼 书生牛犊
我贴上去的只是一部分数据
编程实现:请将funtopic.txt中每一行看成是一个功能体,将这些数据读入数组,数组中元素就是这些功能体,那么数组的下标就是功能体的编号了。然后,另外在将功能体之间的父子关系找出来保存到另一个一维数组中,该数组下标表示功能体编号,其值表示父亲功能提编号,0表示无父亲(c语言可以用-1表示无父亲)。
第一个数组结果(部分):
1   | 2     | 3      | 4      |  5     |  6      |  7
01  | 01/01 | 01/02  | 01/03  |  01/04 |  01/05  |01/06

第二个数组结果(部分):
1   | 2     | 3      | 4      |  5     |  6      |  7
   0|      1|       1|       1|      1 |        1|   1
2016-09-17 18:49
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 5楼 hllSaturn
第一个数组结果(部分):
1   | 2     | 3      | 4      |  5     |  6      |  7
01  | 01/01 | 01/02  | 01/03  |  01/04 |  01/05  |01/06

第二个数组结果(部分):
1   | 2     | 3      | 4      |  5     |  6      |  7
   0|      1|       1|       1|      1 |        1|   1
没看懂?没看出来这第一个数组结果和第二个数组结果之前有什么共同点(除了两个都输出了一行表头1-7,是表示一行输出七个数据吗?还是什么?)。





[此贴子已经被作者于2016-9-17 23:21编辑过]


φ(゜▽゜*)♪
2016-09-17 23:17
hllSaturn
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2015-12-20
收藏
得分:0 
回复 6楼 书生牛犊
第二个数组里放的是对应第一个数组里数据的数组下标。
2016-09-18 15:57
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 7楼 hllSaturn
所以是不是说输出结果分成两部分:
1.对应每一个功能链,输出包含它的完整子功能链
2.对应每一个功能链,输出他们的父功能链序号。(从1开始计数,0表示不存在比他本身更短的负功能链)
-------------------------------
对下面这句话,我还不是太理解:
例如某行数据为“01/05/03/06/07/02/02”,那么可以知道,该功能链最顶级的功能为01,05为其子功能,而01/05/又是05的子功能。
1.该功能链最顶级的功能为01:是不是说对于任意一个功能链,他的第一个功能就是他的顶级功能?
2.形如:01.05.03.06.07.02他们都是示例中给出的功能链的子功能?
3.而01/05/又是05的子功能。这句话完全不能理解。05是01/05的子功能,01/05又是05的子功能?到底谁是谁的子功能?



φ(゜▽゜*)♪
2016-09-19 12:49
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
读数据部分的示例代码如下。具体还是要看数据规模怎么样,

程序代码:
#include<stdio.h>
#include<stdlib.h>


typedef struct node {
    int Function[20];//假设每段功能链包含的功能数目不足20个
    int Lenth;
} node,*Node;

Node ReadData() {
   

    Node temp=(Node)malloc(sizeof(node));
    temp->Lenth=0;
    while(scanf("%d",&temp->Function[temp->Lenth])==1) {
        ++temp->Lenth;
        if(getchar()=='\n')break;//如果数字之后的一个字符是回车而不是‘\’,那么这就是一个功能链读完了
        

    }
    if(temp->Lenth==0)return NULL;//如果某次读到的功能链长度为0,那么说明文件当中没有更多的数据了
    else return temp;
}



int  main(int argc,char*argv[]) {
    Node Map[100];//假设文件包含的功能链总数不足100条
    int Number=0;
    Node temp;
    while(temp=ReadData()) {
        Map[Number++]=temp;//把读来的数据添加到数组当中去。
    }
    printf("\n-----Print Try------\n");
    for(int i=0; i<Number; i++) {
        printf("第%d条功能链:",i+1);//
        for(int j=0; j<Map[i]->Lenth; j++) {
            if(j)printf("\\");

            printf("%d",Map[i]->Function[j]);
        }
        printf("\n");
    }
    return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册



上面的代码核心也就14-19行的那一点,不管你后面打算用什么结构存储,都可以用这个方式来读数据


[此贴子已经被作者于2016-9-19 13:27编辑过]


φ(゜▽゜*)♪
2016-09-19 13:24
快速回复:求助!真的是连头都不会开!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.112442 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved