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

Nonogram开发问题:计数器>9时需输出对应字母而非数字

问题分析与解决方案

你的问题根源在于两个关键错误:字母计算逻辑错误和类型不匹配导致输出ASCII码而非字符。咱们一步步来修复:

1. 修正字母计算逻辑

你需要的是counter=10→A、counter=11→B,但当前代码里'a'+counter的计算完全不符合需求:

  • 大写字母A的ASCII值是65,所以当counter>9时,应该用'A' + (counter - 10)来计算对应的字母(比如10-10=0 → 65+0=65='A',11-10=1→66='B')
  • 如果想用小写字母就用'a' + (counter -10),但你的需求是输出A/B这类大写字母,所以用大写基准更合适

2. 修复letter函数的类型与返回值问题

你的letter函数返回的是int,但实际需要返回字符;而且当前函数没有处理counter≤9的情况,也存在返回值缺失的问题。修正后的函数如下:

char nono::letter(int counter){
    if (counter > 9){
        // 10对应A,减去10得到字母偏移量
        return 'A' + (counter - 10);
    } else {
        // counter≤9时,返回对应的数字字符(比如5→'5')
        return '0' + counter;
    }
}

3. 调整数组类型或输出逻辑

你的column数组看起来是int类型,这会导致存储字符时自动转成ASCII码值(比如'A'会存成65),输出时就会打印数字而非字符。你有两种修复方式:

方式一:修改column数组类型

直接将column的类型改为char,这样可以直接存储字符,后续输出无需额外处理。

方式二:在输出时转换类型(不修改数组)

如果暂时不想改动数组类型,可以在printDescColumn函数输出时判断值的范围,转成字符输出:

if(column[j][i]!=0 ){
    if (column[j][i] > 9) {
        // 将ASCII码值转回字符输出
        cout << static_cast<char>(column[j][i]) << " ";
    } else {
        cout << column[j][i] << " ";
    }
    notEmpty=true;
}else{
    cout<<"  ";
}

4. 补全makeDis函数的收尾逻辑

你的makeDis函数还有一个小问题:当内部循环结束后,若最后一组连续的1还没处理(比如循环到最后一个元素时counter>0),这组计数会被遗漏。建议在内部循环结束后添加收尾判断:

for (int i = 0; i <= height; i++){
    // 原有的判断逻辑...
}
// 处理循环结束后剩余的counter
if(counter > 0){
    column[j][besc] = letter(counter);
    besc++;
}

测试验证

当counter=10时,修正后的letter函数返回'A'(ASCII 65),无论是直接存char数组还是输出时转类型,都会打印出预期的A而非数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:27:29