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

C++中std::string数字字符参与算术运算出现48偏移问题求解

问题根源

你遇到的48是字符'0'的ASCII编码值,这是C++中char类型参与运算的默认规则导致的:

  • std::string的每个元素都是char类型,直接用std::cout输出char时,会打印它对应的可见字符,所以'1'会直接输出1符合你的预期
  • 当char类型和int类型做算术运算、比较运算时,char会自动提升为int类型,使用它的ASCII编码值参与计算:'0'对应48、'1'对应49,以此类推,自然就出现了“数值等于48加对应数字”的现象。

解决方法

将字符型的数字转换为对应的整数值再参与运算即可,利用ASCII中数字字符连续编码的特性,减去'0'的编码值就行:

// 在switch逻辑之前先做转换
int move_digit = move[1] - '0';

后续所有需要用move[1]做数值比较、计算的位置,全部替换为move_digit即可,比如你的判断条件改成if (spaces[a][i] == move_digit)就会按预期工作了。

代码中其他需要修正的问题

  • 赋值操作误用了比较运算符:代码中taken[a][i] == 1;和taken[a][i] == 2;是判断相等的比较操作,不会给taken数组赋值,要改成单等号=:taken[a][i] = 1;、taken[a][i] = 2;
  • erase操作的容器索引错误:spaces[a].erase(spaces[i].begin() + i);中取迭代器误用了spaces[i],应该改为你要操作的spaces[a],否则当循环变量i和行列索引a不一致时会出现越界错误,修正为spaces[a].erase(spaces[a].begin() + i);
  • 建议给switch添加default分支,处理输入不是A/B/C的异常情况,避免变量a未初始化导致的未定义行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:06:06