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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:40:33