Ceceliaaa 2023-04-07 21:30 采纳率: 66.7%
浏览 17

关于 最长公共子串 的问题

为什么报错是分段错误呢大家

img

#include<stdio.h>
int zuichanggonggongzichuan(int n,char(*)[10000]);
int main(void)
{
    int n;
    int i,k,count;
    int T; 
    char ch[n][10000];
    
    scanf("%d",&T);
    scanf("%d",&n);
    
    for(i=0;i<T;i++)
    {
        for(k=0;k<n;k++)
        {
            scanf("%s",ch[k][10000]);
        }
        count=zuichanggonggongzichuan(n,ch[n][10000]);
        printf("%d",count);
    } 
    return 0;
}
int zuichanggonggongzichuan(int n,char ch[n][10000])
{
    int count=0;
    int jishu[10000]={0};
    int i,k;
    int m;
    //将每个字母字符串转换成数字字符串,然后一其值为索引存入一个辅助数组 
    for(i=0;i<n;i++)
    {
        for(k=0;k!='\0';k++)
        {
            ch[i][k]=ch[i][k]-'a'+10;
        }
    }
    //从第一个字符串开始以一其值为索引存入一个辅助数组 
    for(i=0;ch[0][i]!='0';i++)
    {
        m=ch[0][i];
        jishu[m]++;
        //防止重复字符 
        if(jishu[m]>1)
        jishu[m]=1;
    }
    //开始利用辅助数组开始,从第二个字符串开始,要是第二个字符串中没有辅助数组中的值,就将这个索引对应的值化为0 
    for(i=1;i<n;i++)
    {//遍历每个字符串 
        for(k=0;ch[i][k]!='0';k++)
        {
            m=ch[i][k];
            jishu[m]++;
        }
        for(m=0;m<10000;m++)
        {
            if(jishu[m]==1)
            jishu[m]=0;
            if(jishu[m]>1)
            jishu[m]=1;
        }
    }
    for(m=0;m<10000;m++)
    {
        if(jishu[m]==1)
        count++;
    }
    return count;
}

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-04-07 21:39
    关注

    第8行的时候,n值还没输入啊,这时候数组大小无法判断大小,可能无法申请足够的内存。要先输入n值后,再定义数组
    17行也不对, scanf("%s",ch[k][10000]);ch数组元素是字符,不是字符串啊。这里会崩溃。改为scanf("%s",ch[k]);
    19行改为 count=zuichanggonggongzichuan(n,ch);

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月7日

悬赏问题

  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验