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

C语言两数组匹配替换问题:将匹配元素替换为'X'并正确输出

C语言数组对比替换与输出修正

编写了下述C语言代码,需求为:对比pirolito数组与retardado数组,当pirolito数组中的元素与retardado数组内任意元素相等时,将pirolito数组对应位置的元素替换为字符'X',并按如下示例格式输出两个数组:
示例输入数组:
pirolito[3, 6, 8, 9, 7, 3, 6, 1, 0, 4]
retardado[3, 17, 12, 18, 11, 16, 6, 10, 0, 15]
预期输出:
[X, 6, 8, 9, 7, 3, X, 1, X, 4]
[3, 17, 12, 18, 11, 16, 6, 10, 0, 15]
但当前编译运行后无报错,却未实现元素替换效果,也无法输出预期格式的数组,请问该如何修改代码以实现需求?

原始代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define BTT 10 

void create_pirolito(int list[BTT]);
void create_retardado(int list[BTT]);
void compare_lists(int list1[BTT], int list2[BTT]);
void prints_both(int list1[BTT], int list2[BTT]);

void create_pirolito(int list[BTT])
{
    for(int i=0; i<BTT; i++)
    {
        list[i]=rand()%10;
    }
}

void create_retardado(int list[BTT])
{
    for(int i=0; i<BTT; i++)
    {
         list[i]=rand()%20;
    }
}

void prints_both(int list1[BTT], int list2[BTT])
{
    int i=0;
    int j=0;
    for(int z=0; z<BTT; z++)
    {
      printf("(%2d  %2d)\n", list1[i], list2[j]);
      i++;
      j++;
    }
}

void compare_lists(int list1[BTT], int list2[BTT])
{
    char x='X';
    for(int i=0; i<BTT; i++)
    {
        for(int j=0; j<BTT; j++)
        {
            if(list1[i]==list2[j])
            {
                list1[i]==(int)(x);
            }
        }
        printf("\n");
    }
}

int main()
{
    int pirolito[BTT];
    int retardado[BTT];
    
    create_pirolito(pirolito);
    create_retardado(retardado);
    compare_lists(pirolito, retardado);
    prints_both(pirolito, retardado);
    
    return 0;
}

存在的问题

  • 替换操作错误:compare_lists函数中使用了比较运算符==而非赋值运算符=,导致无法完成元素替换。
  • 输出格式不匹配:prints_both函数的输出逻辑与预期格式不符,预期是数组整体用[]包裹、元素逗号分隔,而非每行输出一对元素。
  • 随机数未初始化种子:未调用srand(time(NULL))初始化随机数生成器,每次运行生成的随机数序列完全相同。
  • 替换后输出逻辑缺失:pirolito数组为int类型,替换为'X'后存储的是其ASCII值(88),直接输出数字会显示88而非字符X,需要判断输出内容。

修正后的代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define BTT 10 

void create_pirolito(int list[BTT]);
void create_retardado(int list[BTT]);
void compare_lists(int list1[BTT], int list2[BTT]);
void print_array(int list[BTT], int is_pirolito);

void create_pirolito(int list[BTT])
{
    for(int i=0; i<BTT; i++)
    {
        list[i] = rand() % 10;
    }
}

void create_retardado(int list[BTT])
{
    for(int i=0; i<BTT; i++)
    {
         list[i] = rand() % 20;
    }
}

// 按预期格式输出数组,is_pirolito标记是否为需要判断X的数组
void print_array(int list[BTT], int is_pirolito)
{
    printf("[");
    for(int i=0; i<BTT; i++)
    {
        if(is_pirolito && list[i] == 'X')
        {
            printf("X");
        }
        else
        {
            printf("%d", list[i]);
        }
        if(i != BTT - 1)
        {
            printf(", ");
        }
    }
    printf("]\n");
}

void compare_lists(int list1[BTT], int list2[BTT])
{
    for(int i=0; i<BTT; i++)
    {
        for(int j=0; j<BTT; j++)
        {
            if(list1[i] == list2[j])
            {
                list1[i] = 'X'; // 赋值操作,存储'X'的ASCII值
                break; // 找到匹配后无需继续对比,跳出内层循环
            }
        }
    }
}

int main()
{
    int pirolito[BTT];
    int retardado[BTT];
    
    srand(time(NULL)); // 初始化随机数种子
    create_pirolito(pirolito);
    create_retardado(retardado);
    compare_lists(pirolito, retardado);
    
    // 按预期格式输出两个数组
    print_array(pirolito, 1);
    print_array(retardado, 0);
    
    return 0;
}

关键修改说明

  1. 修复替换操作:将compare_lists中的list1[i]==(int)(x);改为list1[i] = 'X';,完成赋值;同时添加break,找到匹配后立即终止内层循环,提升效率。
  2. 重写输出函数:新增print_array函数,实现数组的[]包裹、逗号分隔格式输出,通过is_pirolito参数判断是否需要将ASCII值为'X'的元素输出为字符X。
  3. 初始化随机数种子:在main函数开头添加srand(time(NULL));,确保每次运行生成不同的随机数序列。
  4. 移除无用代码:删除compare_lists中多余的printf("\n");语句,避免无意义的空行输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:35:44