我的substr函数有问题C ++

问题描述

好吧,我应该返回一个单词的中间字符。如果单词的长度是奇数,则返回中间字符。如果单词的长度是偶数,则返回中间的2个字符。例如,“ 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");
}

解决方法

看看您的代码,它是否返回中间字符(无论哪种情况)?否,因为您说input.substr(1,..)会返回字符。

您要的是奇怪的情况

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

我会让你解决偶数问题。

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

,

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

,

首先,您的主要方法不正确。请将“ Main”更改为“ main”并返回一些整数值。

这是完成任务的方式。

    #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

现在,第一个输出用于奇数字符串,第二个输出用于偶数字符串。