递归函数来反转字符串中的子字符串
问题我正在做一个实验任务,用户输入一个字符串,并且字符串中子字符串的起点和终点要反转。例如,如果用户输入字符串“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 和 9,因为这是字符串的全长。
如何调整函数,使其仅反转在用户输入的索引处开始和结束的字符串?此外,在当前函数中,我必须在 main 中使用 endl 在字符串输出的末尾创建一个新行。我可以在函数中执行此操作吗?如果我放一个 cout << s;在 endl 之后,它在每次迭代后放置一个新行,使输出垂直:
公司
t型
一
c类
第二
o型
第二
o型
公克
主要实现:
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;
回答
反转字符串的函数交换范围两端的元素并在任一侧将范围缩小一个。
void reversing(string& s, int start, int end) {
if (start >= end)
return;
swap(s, s);
reversing(s, start + 1, end - 1);
}
然后进入 main() :
// ...
cout << "This is how your words look now:\n";
reversing(s, start, end);
cout << s << endl;
页:
[1]