找回密码
 立即注册
字符串反转start函数 | 软件设计/软件工程 2022-05-04 225 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
问题
我正在做一个实验任务,用户输入一个字符串,并且字符串中子字符串的起点和终点要反转。例如,如果用户输入字符串“go bobcats”、数字 3(用于开始索引)和 7(用于结束索引),则输出应该是“go accobts”。我可以编写一个递归函数来反转整个字符串(“go bobcats”变成“stacbob og”),但我遇到了子字符串的问题。

完整的字符串反转代码:
  1. void reversing(string s, int start, int end){
  2.     if(s.size() == 0){return;}
  3.     else{
  4.         reversing(s.substr(1), start + 1, end);
  5.         cout << s[0];
  6.     }
  7. }
复制代码

对于它的开始和结束索引,我只输入了 0 和 9,因为这是字符串的全长。

如何调整函数,使其仅反转在用户输入的索引处开始和结束的字符串?此外,在当前函数中,我必须在 main 中使用 endl 在字符串输出的末尾创建一个新行。我可以在函数中执行此操作吗?如果我放一个 cout << s[0];在 endl 之后,它在每次迭代后放置一个新行,使输出垂直:

公司

t型



c类

第二

o型

第二

o型

公克

主要实现:
  1. string s;
  2.     int start, end;
  3.     cout << "Enter a string: ";
  4.     while(cin.peek() == '\n' || cin.peek() == '\r'){
  5.         cin.ignore();
  6.     }
  7.     getline(cin,s);
  8.     cout << "Now enter two numbers that are within the bounds of the string. ";
  9.     cin >> start >> end;
  10.     cout << "This is how your words look now:\n";
  11.     reversing(s,start,end);
  12.     cout << endl;
复制代码

回答
反转字符串的函数交换范围两端的元素并在任一侧将范围缩小一个。
  1. void reversing(string& s, int start, int end) {
  2.     if (start >= end)
  3.         return;
  4.     swap(s[start], s[end]);
  5.     reversing(s, start + 1, end - 1);
  6. }
复制代码

然后进入 main() :
  1. // ...
  2. cout << "This is how your words look now:\n";
  3. reversing(s, start, end);
  4. cout << s << endl;
复制代码






上一篇:Dynamics CRM - 其他实体的重复工作流
下一篇:React 中的简单 for 循环需要标识符