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

如何用C++的substr函数提取奇数长度字符串的中间3个字符?

问题:如何截取字符串的中间三个字符(适配任意奇数长度)

你的代码核心问题是对C++ string::substr()函数的参数理解错了:第二个参数是要截取的字符长度,不是结束索引。你当前写的middle+1会让截取长度随字符串长度变化,比如输入xxxtoyxxx(长度9)时会截取5个字符,自然得不到正确的中间3个。

正确的逻辑很简单:

  • 因为要固定取3个字符,所以substr的第二个参数直接写3
  • 起始索引为middle - 1,其中middle = length / 2(由于字符串长度是奇数,整数除法刚好得到中间字符的索引)

举几个验证例子:

  • 输入cat(长度3):middle=1,起始索引0,截取3个字符 → 结果cat,正确
  • 输入flags(长度5):middle=2,起始索引1,截取3个字符 → 结果lag,正确
  • 输入xxxtoyxxx(长度9):middle=4,起始索引3,截取3个字符 → 结果toy,正确

修正后的代码:

#include <iostream>
#include <string>
using namespace std;

int main() 
{
   string a;
   cin >> a;

   int length = a.length();
   int middle = length / 2;
   // 起始位置是中间字符的前一位,截取3个字符
   string c = a.substr(middle - 1, 3);

   cout << "Midfix: " << c << endl;
   return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:45:32