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

C语言实现打印字母表中未出现在猜测字符中的剩余字符问题

代码问题分析
  • 可用字符存储索引错误:原代码使用字母表的遍历下标i作为available_character的赋值索引,已猜中字母对应的数组位置不会被赋值,会残留初始垃圾值,同时可用字符之间会出现空位。
  • 判断逻辑位置错误:判断当前字母是否可用的逻辑放在了内层循环内部,还未遍历完所有已猜字符就会提前执行赋值,逻辑完全错误。
  • 字符串缺少结束符:C语言要求字符串必须以\0结尾,原代码赋值完可用字符后没有主动添加结束符,printf打印时会读取数组后方的垃圾内存,导致输出乱码。
修复方案
  1. 新增独立的可用字符索引变量,每次确认字母可用时才对该索引自增
  2. 将可用判断逻辑移到内层循环结束后,遍历完所有已猜字符再做判断
  3. 所有可用字符赋值完成后,主动在数组末尾添加\0作为字符串结束标记
修复后完整代码
#include <stdio.h>
#include <string.h>

void letters(const char gussed_character[], char available_character[]){
    char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
    int gussed_len = strlen(gussed_character);
    int alpha_len = strlen(alphabet);
    int avail_idx = 0;

    for(int i = 0; i < alpha_len; i++){
        int is_available = 1;
        for(int j = 0; j < gussed_len; j++){
            if(alphabet[i] == gussed_character[j]){
                is_available = 0;
                break;
            }
        }
        if(is_available){
            available_character[avail_idx++] = alphabet[i];
        }
    }
    available_character[avail_idx] = '\0';
    printf("%s", available_character);
}

int main(){
    char result[30];
    letters("arpstxgoieyu", result);  
}
运行输出

bcdfhjklmnqvwz

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:06