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

C++中string的size()在评测系统返回值偏大1的原因咨询

问题原因及解决办法
  • 核心原因:评测系统的输入文件大概率是Windows格式的换行(\r\n)。本地如果是Windows环境,getline会自动剔除换行时的\r;但编程竞赛评测系统一般用Linux/Unix环境,getline只识别\n作为行结束符并去掉,会把\r留在字符串末尾,导致size()/length()的返回值比实际多1。比如输入"test"后按回车,Windows下输入是"test\r\n",本地getline读成"test",但Linux环境下读成"test\r",size()自然就是5。

  • 验证方式:可以在代码里加一段输出字符ASCII码的逻辑,确认是否存在多余的\r:

    for (char c : myvariable) {
        cout << static_cast<int>(c) << " ";
    }
    

    如果输出最后一个数值是13(\r的ASCII码),就可以确定是这个问题。

  • 解决办法:

    • 读取后手动移除末尾的\r:
      if (!myvariable.empty() && myvariable.back() == '\r') {
          myvariable.pop_back();
      }
      
    • 或者全局查找并删除所有\r(适用于输入中可能存在多个\r的情况):
      size_t cr_pos;
      while ((cr_pos = myvariable.find('\r')) != string::npos) {
          myvariable.erase(cr_pos);
      }
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:50:32