C语言二维数组中查找字符串元素的代码问题求助
修复二维字符数组中查找字符串元素的C语言代码
原代码的问题分析
c++的位置错误:原代码内层j循环每执行一次就推进c的索引,导致还未找到当前str[c]就跳到下一个字符,完全打乱查找逻辑。- 循环逻辑混乱:原代码将二维数组的遍历与目标字符串的索引推进混合在一起,没有实现“逐个查找str中每个字符”的需求。
- 缺少未找到的提示逻辑:无法反馈某个字符在二维数组中不存在的情况。
修复后的代码
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(){ setlocale(LC_ALL, "Turkish"); char signs[7][6] = {{'A', 'G', 'L', 'S', 'Z', '6'}, {'B', 'Ğ', 'M', 'Ş', '0', '7'}, {'C', 'H', 'N', 'T', '1', '8'}, {'Ç', 'I', 'O', 'U', '2', '9'}, {'D', 'İ', 'Ö', 'Ü', '3', '?'}, {'E', 'J', 'P', 'V', '4', '!'}, {'F', 'K', 'R', 'Y', '5', ' '}}; // 添加字符串结束符,方便遍历判断 char str[10] = {'H', 'E', 'L', 'L', 'O', '2', '3', '\0'}; // 遍历目标字符串的每个字符 for(int c = 0; str[c] != '\0'; c++){ int found = 0; // 遍历二维数组的每一行 for(int i = 0; i < 7; i++){ // 遍历当前行的每一列 for(int j = 0; j < 6; j++){ if(signs[i][j] == str[c]){ printf("%c 存在于数组的 (%d, %d) 位置\n", str[c], i+1, j+1); found = 1; // 若只需查找第一个匹配位置,可在此添加 break; 跳出内层循环 } } } if(!found){ printf("%c 在数组中未找到\n", str[c]); } } return 0; }
正确的查找思路
- 逐个处理目标字符:外层循环遍历
str中的每个字符,直到遇到字符串结束符'\0'(或根据已知元素数量循环)。 - 遍历二维数组全元素:对每个目标字符,嵌套遍历二维数组的行和列,逐一比较字符是否匹配。
- 灵活处理匹配结果:如果需要查找字符的所有出现位置,不要提前终止内层循环;如果只需第一个匹配位置,找到后可跳出内层循环提升效率。
- 状态反馈:用标记变量记录当前字符是否找到,未找到时输出提示信息。
内容的提问来源于stack exchange,提问作者somebody
相关产品推荐
相关产品推荐

