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

C++ string substr方法行为疑惑:输出为何与预期不符?

关于C++ string::substr方法的行为解释

你的问题核心是搞错了substr的参数定义:它的第二个参数是要提取的字符长度,不是结束位置的索引。

先看你的测试代码:

string A = "LOLWUT";

cout << A.substr(0, A.length() - 1) << endl;
cout << A.substr(1, A.length() - 1) << endl;

字符串A的长度是6,我们逐行分析:

  1. 第一行调用A.substr(0, 6-1):
    从索引0开始,提取5个字符,得到LOLWU,这和实际输出、你的预期都一致。

  2. 第二行调用A.substr(1, 6-1):
    从索引1开始,提取5个字符。原字符串索引1的字符是O,往后数5个字符分别是O、L、W、U、T,所以输出OLWUT——这就是实际结果的由来。

你预期输出OLWU,是误以为第二个参数是结束索引(比如想取到索引4),但实际上要得到4个字符,应该把第二个参数设为A.length()-2(也就是4),写法是:

cout << A.substr(1, A.length() - 2) << endl;

这样从索引1开始取4个字符,就能得到OLWU。

另外补充:如果substr的第二个参数超过了起始位置到字符串末尾的剩余字符数,函数会自动取到字符串末尾,但你的情况里,从索引1到末尾正好有5个字符,所以全部被提取了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:52:36