【发布时间】:2020-07-27 14:37:02
【问题描述】:
我正在做一个实验室作业,用户输入一个字符串以及字符串中要反转的子字符串的起点和终点。例如,如果用户输入字符串“go bobcats”,以及数字 3(用于起始索引)和 7(用于结束索引),则输出应为“go accobts”。我能够编写一个递归函数来反转整个字符串(“go bobcats”变成“stacbob og”),但我在子字符串方面遇到了麻烦。
全串反转代码:
void reversing(string s, int start, int end){
if(s.size() == 0){return;}
else{
reversing(s.substr(1), start + 1, end);
cout << s[0];
}
}
对于这个的开始和结束索引,我只输入了 0 和 9,因为那将是字符串的全长。
如何调整函数,使其仅反转在用户输入的索引处开始和结束的字符串?此外,使用我当前的函数,我必须在 main 中使用 endl 在字符串输出的末尾创建一个新行。有没有办法在函数内部做到这一点?如果我在cout << s[0]; 之后放置一个endl,它会在每次迭代后插入一个新行,使输出垂直:
s
t
一个
c
b
o
b
o
g
main 中的实现:
string s;
int start, end;
cout << "Enter a string: ";
while(cin.peek() == '\n' || cin.peek() == '\r'){
cin.ignore();
}
getline(cin,s);
cout << "Now enter two numbers that are within the bounds of the string. ";
cin >> start >> end;
cout << "This is how your words look now:\n";
reversing(s,start,end);
cout << endl;
【问题讨论】:
-
一定要递归吗?
-
您可能会发现std::reverse 很有用。
-
@0x499602D2 是的,它必须是递归的
-
请提供minimal reproducible example。您发布的代码中没有
endl -
看起来你对
end没有太多用处。
标签: c++ string recursion reverse function-definition