You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现字符数组限输字母及查找两数组相同三字符子串

C语言三字符元组匹配程序排错

任务要求

  • 程序启动后先输入两个字符数组的最小长度:
    • 数组A仅允许录入小写字母
    • 数组B允许录入大小写字母
  • 逐字符录入两个数组的内容,不得直接整体读入字符串
  • 遍历两个数组所有连续三字符组成的元组,按照大小写不敏感的规则比对元组,将匹配成功的共有三元组拼接为结果子串
  • 大小写不敏感比较使用strcasecmp实现,不得使用strcmpi

参考示例:arrayA内容为a s d r e d b l u,arrayB内容为d B l u a s d R e d,预期输出结果子串为red blu,匹配到的共有三元组为red、blu

实现约束

  • 代码中不得使用break、goto、switch语句
  • 必须逐字符录入数组内容,不得直接以字符串形式整体输入数组

现存问题

现有代码无编译语法错误,但运行时存在异常:

  • 曾尝试使用gets函数实现录入,但按空格、回车无法正常结束输入
  • 数组录入校验、三元组遍历匹配、结果拼接逻辑均存在错误,无法得到正确结果
    附原有问题代码:
#include <stdio.h>
#include <string.h>

int main()
{
    int i=0,j=0,s,m,n;
    char nizA[100], nizB[100], podstring[100], pom, niz1p[100], niz2p[100];
    printf("Enter the minimal value of array A\n");
    scanf("%d",&m);
    printf("Enter the minimal value of array B\n");
    scanf("%d",&n);
    do{
        printf("Enter elements of array A\n");
        for(i=0;nizA[i]<m;i++)
        {
            scanf("%c",&nizA[i]);
            if (nizA[i]<'a' && nizA[i]>'z')
            {
                i--;
                printf("The required condition is not met.");
            }
        }
        
        
    }while(nizA[i]<'a' && nizA[i]>'z');
 do {
     
    printf("Insert elements of the array B:\n");
        for(j=0;nizB[j]<m;j++)
         {
            scanf("%c",&pom);
            if (nizA[i]<'a' && nizA[i]>'z' || nizA[i]<'A' && nizA[i]>'Z')
            {
                nizB[j]=pom;
            }
                else
                {
                    j--;
                 
               }
        }

    }while(nizA[i]<'a' && nizA[i]>'z' || nizA[i]<'A' && nizA[i]>'Z');
 printf("Entered array  A is:\n");
 printf("%c",nizA[i]);
 printf("Entered array B is\n");
 printf("%c",nizB[j]);
  for(i=0;nizA[j]<m;i++)
  {
   for(j=0;nizB[j]<m;j++)
   {
       niz1p[0]=nizA[i];
       niz1p[1]=nizA[i+1];
       niz1p[2]=nizA[i+2];
       niz2p[0]=nizA[i];
       niz2p[1]=nizA[i+1];
       niz2p[2]=nizA[i+2];
       if (strcasecmp(niz1p,niz2p))
       {
           podstring[s+1]=nizA[i];
           podstring[s+2]=nizA[i+1];
           podstring[s+3]=nizA[i+2];
       }
   }
      
  }

printf("The substring is\n");
printf("%c",podstring[s]);

}

原有代码核心错误

  • 输入处理问题:scanf("%d")读取整数后会在输入缓冲区残留换行符,后续逐字符读取时会直接将残留的换行、空格当作有效字符读入,导致录入逻辑混乱;字符合法性判断条件写反,例如判断非法小写字母的条件nizA[i]<'a' && nizA[i]>'z'永远不成立,完全起不到校验作用;录入数组B时错误引用数组A的下标和值做校验,没有判断当前读入字符的合法性。
  • 循环控制问题:数组录入、遍历的循环终止条件错误,用字符的ASCII值和最小长度m/n做大小比较,没有单独统计两个数组实际录入的有效字符长度;嵌套遍历三元组时内外循环共用j下标,外层循环的下标会被内层循环修改,遍历逻辑完全失效。
  • 匹配拼接问题:构造B数组待比对三元组时,错误复制了A数组的字符,没有取B数组对应位置的内容,比对完全无效;strcasecmp返回0时代表两个字符串相等,原有判断条件写反,匹配成功的分支不会被触发;结果数组下标s未初始化,拼接三元组时没有正确移动下标,也没有在结果末尾添加字符串结束符\0,输出时会出现乱码。
  • 输出逻辑问题:打印录入的数组、最终结果时都只输出单个字符,无法展示完整内容。

内容的提问来源于stack exchange,提问作者asdasdasd asdasdasd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:48:15