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

从用户输入生成有序唯一字符数组(唯一字符串)问题排查

修复按输入顺序保留唯一字符的C语言函数问题

你的代码目前输入后无任何输出,核心原因是逻辑错误与未初始化数组导致的,以下是问题分析与修复方案:

原代码的问题点

  • 未初始化目标数组:updated_string作为局部数组,默认填充垃圾值,strchr查找时会得到不可预期的结果
  • 逻辑完全颠倒:当前逻辑是"找到字符时才添加",但实际需求是"未出现过的字符才添加",导致符合要求的字符根本不会被写入
  • 缺少字符串结束符:即使逻辑正确,updated_string最后没有加'\0',后续打印或返回操作会读取到垃圾内容
  • 函数设计不符合需求:需求是返回唯一字符数组,但当前函数为void类型,仅尝试打印且打印逻辑错误

修复后的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 将处理后的结果存入传入的output缓冲区
void unique_string(const char* input, char* output) {
    int counter = 0;
    // 初始化输出数组为全0,避免垃圾值干扰查找
    memset(output, 0, 251);
    
    for (int i = 0; i < strlen(input); ++i) {
        char current_char = input[i];
        // 仅当字符未在结果数组中出现过时,才添加进去
        if (strchr(output, current_char) == NULL) {
            output[counter] = current_char;
            counter++;
        }
    }
}

int main() {
    char input[251];
    char result[251];
    scanf("%s", input);
    
    unique_string(input, result);
    printf("%s\n", result);
    
    return 0;
}

关键修改说明

  • 初始化数组:用memset将output初始化为全0,确保strchr能正确判断字符是否已存在
  • 修正逻辑判断:仅当strchr返回NULL(字符未出现过)时,才将字符加入结果数组
  • 调整函数参数:新增output参数存储结果,符合"返回唯一字符数组"的需求(也可改为动态分配内存返回,缓冲区方式更简洁)
  • 保障字符串完整性:memset初始化时已将数组末尾设为'\0',也可在循环结束后手动添加output[counter] = '\0'

测试验证:

  • 输入Joooooooe,输出Joe
  • 输入Rooooobert,输出Robert
  • 输入Aalllbbert,输出Albert
  • 输入Duuuccck,输出Duck

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:05:24