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
相关产品推荐
相关产品推荐

