我对 substr 函数有疑问(C++)

I have a problem with substr function(C++)

嗯,我应该return一个字的中间字符。如果单词的长度是奇数,return 中间字符。如果单词的长度是偶数,return 中间的 2 characters.Like "test" => "es" 或者 "testing" => "t"。 这就是我写的 =>

#include <iostream>
std::string get_middle(std::string input) 
{
  if (input.length() % 2 == 0) {
    return input.substr(1,2);
  } else {
    return input.substr(1,1);
  }
};

int Main() {
  get_middle("test");
  get_middle("testing");
}

看看您的代码,它 return 是 中间 字符吗(无论哪种情况)?不,因为你说 input.substr(1,..) 它 return 是 第二个 字符。

你想要的是奇数情况下的这个

return input.substr(input.length()/2, 1);

我会留给你解决偶数问题。

事实上,如果您非常聪明,您可以对奇数和偶数情况使用相同的公式。

我猜问题是你没有得到中间字符(请下次说明问题)。第一个参数应该是你想要的子字符串中第一个字符的索引,意思是 input.length() / 2

首先,你的main方法不正确。请将“Main”更改为“main”和return一些整数值。

这就是您完成任务的方式。

    #include <iostream>
using namespace std;
std::string get_middle(std::string input)
{
    if (input.length() % 2 == 0) {
        return input.substr((input.length() / 2)-1, 2);
    }
    else {
        return input.substr(input.length()/2, 1);
    }
};
 int main() {
    //cout<<get_middle("test")<<endl;
    cout<<get_middle("testing")<<endl;
    cout << get_middle("test") << endl;
    
    return 0;
}

输出:

t

es

现在第一个输出是奇数串,第二个是偶数串。