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

C语言实现common_char字符串合并去重函数问题求助

问题修正与实现方案

你代码飘红的几个直接原因:

  • 调用malloc未引入<stdlib.h>头文件,编译器找不到函数定义会触发隐式声明错误
  • 函数定义返回值为char*但全程无return语句,会触发编译错误
  • 嵌套循环的设计和题目给定规则不匹配,空if块无实际执行逻辑,无法达成需求
核心实现逻辑

题目已经给出明确实现规则,不需要做两边字符串的交叉重复比对,按规则分步实现即可:

  1. string1的所有字符直接完整拷贝到新串,不需要处理string1内部的重复字符,比如示例里"hello"的两个'l'都要保留,直接用strcpy就能完成这一步
  2. 逐一遍历string2的每个字符,对当前字符做校验:只要这个字符没有在string1中出现过,就追加到新串末尾;如果已经在string1里存在,直接跳过
  3. 所有字符处理完成后,给新串末尾补上字符串结束符\0,返回新串指针即可

判断string2的字符是否在string1存在时,直接遍历string1全串做等值比对即可,不需要复杂数据结构,这也是这类基础考试题的核心考察点——循环逻辑与字符串操作。

完整可运行代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *common_char(char *string1, char *string2) {
    int str_length1 = strlen(string1);
    int str_length2 = strlen(string2);
    // 申请内存长度为两串长度和+1,足够存储所有字符+字符串结束符
    char *new_string = (char*)malloc(str_length1 + str_length2 + 1);
    // 按规则先完整拷贝string1到新串
    strcpy(new_string, string1);
    // 记录新串当前写入位置,初始在string1拷贝完成的末尾
    int cur_pos = str_length1;

    // 遍历string2每个字符
    for (int i = 0; i < str_length2; i++) {
        char cur_c = string2[i];
        int exist = 0; // 标记当前字符是否在string1中存在
        // 遍历string1查重
        for (int j = 0; j < str_length1; j++) {
            if (string1[j] == cur_c) {
                exist = 1;
                break; // 找到匹配字符直接终止查重循环
            }
        }
        // 字符不存在则追加到新串,写入位置后移
        if (!exist) {
            new_string[cur_pos++] = cur_c;
        }
    }
    // 补字符串结束符
    new_string[cur_pos] = '\0';
    return new_string;
}

int main(void) {
    char s1[] = "hello";
    char s2[] = "world";
    char *res = common_char(s1, s2);
    printf("%s\n", res); // 输出hellowrd,和示例结果完全一致
    free(res); // 释放malloc申请的堆内存,避免内存泄漏
    return 0;
}
补充说明
  • 该实现完全贴合题目给定规则,不会额外处理string1内部的重复字符,比如输入string1为"aab"、string2为"abc"时,输出为"aabc",符合题目要求
  • 不需要刻意追求复杂的查重优化,这类考试真题的评分核心是逻辑符合规则、运行结果正确、语法无错误,基础循环实现的可读性和正确率最高

内容的提问来源于stack exchange,提问作者Cedric xu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:57:27