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

C语言移除数组指定索引元素后重排 空元素置尾算法实现

代码补全方案

你已经完成了待删除位置的元素置零,内层for循环只需要实现「后续有效元素依次前移、末尾空位清零」的逻辑即可,补全后完整的匹配分支代码如下:

if ((strcmp(temp_string_for_prname, INVENTORY_NAMES_ARRAY[i])) == 0) {
    // 原有置零逻辑
    memset(INVENTORY_NAMES_ARRAY[i], 0, sizeof(INVENTORY_NAMES_ARRAY[i]));
    INVENTORY_PRICES_ARRAY[i] = 0;
    INVENTORY_AMOUNT_ARRAY[i] = 0;
    int j = i;
    // 补全的重排循环:从删除位置开始,把后面所有有效元素往前挪一位
    for (; strlen(INVENTORY_NAMES_ARRAY[j+1]) != 0; j++) {
        INVENTORY_AMOUNT_ARRAY[j] = INVENTORY_AMOUNT_ARRAY[j+1];
        INVENTORY_PRICES_ARRAY[j] = INVENTORY_PRICES_ARRAY[j+1];
        // 用memmove处理字符串拷贝,避免内存重叠问题
        memmove(INVENTORY_NAMES_ARRAY[j], INVENTORY_NAMES_ARRAY[j+1], sizeof(INVENTORY_NAMES_ARRAY[j]));
    }
    // 把移动后末尾遗留的旧数据清零
    memset(INVENTORY_NAMES_ARRAY[j], 0, sizeof(INVENTORY_NAMES_ARRAY[j]));
    INVENTORY_AMOUNT_ARRAY[j] = 0;
    INVENTORY_PRICES_ARRAY[j] = 0;
    // 删除完成后直接跳出循环,避免前移后的元素被重复匹配
    break;
}

逻辑说明

  • 循环终止条件判断j+1位置的名称是否为空:原数组本身就是「有效元素连续在前、空元素全在末尾」的结构,遇到第一个空名称就说明已经走到有效元素边界,不需要再往后遍历。
  • 三个数组同步前移,保证同一个索引下的商品名称、价格、库存对应关系不混乱。
  • 移动字符串用memmove而不是strcpy:相邻数组元素的内存空间连续,memmove可以安全处理内存重叠的拷贝场景。
  • 最后必须把j位置(也就是原来最后一个有效元素的位置)的旧数据清零,不然会出现最后一条商品重复的问题。
  • 分支末尾加break:元素前移之后,原来i+1位置的元素会移到i位置,如果不跳出循环,后续遍历会重复处理这个元素。
  • 记得提前包含<string.h>头文件,memmove、memset、strlen、strcmp这些函数都在这个头文件里声明。

内容的提问来源于stack exchange,提问作者Димитър Милчев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:51:18