c - 在长二进制序列中找到与给定短二进制序列最相似的三个匹配项

标签 c

我是 C 编程的新手,有一个我无法解决的问题。
来自包含大量信息的文件,结构如下
"id"\t 2048 次 '0' 或 '1' 例如:

81283 \t   0101011010.....0110

我必须从用户引入的新序列中找到与用户引入的序列大小相同的 3 个最相似的元素。

例如用户输入的序列,010101,程序必须显示如下

  • n1= 010101
  • n2= 010100
  • n3=010010

那些是每行中所有 2048 个'0''1'中最相似的 3 个序列。

我希望问题得到很好的解释。 我有下面这段代码,但它没有解决问题。

谁能帮帮我?

谢谢。

int procura(int *v, int *c, int tam){
int i,j,t;
FILE *fp;
fp=fopen("fich.txt","r");
v=(int*)malloc(sizeof(int));
c=(int*)malloc(sizeof(int));
while(!feof(fp)){
    fscanf(fp,"%d",&v);
}
t = sizeof(v)/sizeof(*v);
for(i=0;i<tam;i++){
    for(j=0;j<t;j++){
        if(c[i]==v[j])
            return 1;
        else
            return 0;
    }
}

int main(){
int *v, *c;
int i,tam,a;
printf("array size\n");
scanf("%d",&tam);
c=(int*)malloc(tam*sizeof(int));
printf("Seq\n");
for(i=0;i<tam;i++){
    scanf("%d",&c[i]);
}
printf("%d",procura(v,c, tam));

return 0;

最佳答案

一些事情:

  • v=(int*)malloc(sizeof(int));
    c=(int*)malloc(sizeof(int));
    

    这些覆盖了指针,所以你失去了原来的 vc .

  • sizeof(v)/sizeof是语法错误

  • 使用 sizeof 获取指针的大小返回指针的大小,而不是它指向的内容

  • 您对 v 的重新分配和 c上面使这些变量指向内存的只有一个单个 int , 然后你遍历 tam表示你超出内存范围的元素

  • fscanf(fp,"%d",&v)你将指针传递给指针

  • 阅读Why is “while ( !feof (file) )” always wrong?

  • 没有错误检查,如果无法打开文件会怎样?

  • 您的函数将在第一个 c[i]==v[j] 之后立即返回检查,它将无条件返回

可能还有更多。

关于c - 在长二进制序列中找到与给定短二进制序列最相似的三个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44374573/

相关文章:

c++ - 适用于调试但不适用于发布

c++ - 合并 K 排序列表尝试

c - 迭代具有编号名称的对象

c - fork 后,全局变量是否共享?

c - 带 NULL 的指针算法

c - 按顺序定位存储在数组中的二叉树中的根节点

c++ - 将 IPv6 存储为 big endian 的原因是什么

c - 在C中初始化UNION的浮点值

c - 将输入文件分成两个不同的二维数组

C 从文件中读取负数和正数到数组中