如何用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
相关产品推荐
相关产品推荐

