[软件设计/软件工程] 递归函数来反转字符串中的子字符串

[复制链接]
发表于 2022-5-4 09:11:22
问题
我正在做一个实验任务,用户输入一个字符串,并且字符串中子字符串的起点和终点要反转。例如,如果用户输入字符串“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 循环需要标识符

使用道具 举报

Archiver|手机版|小黑屋|吾爱开源 |网站地图

Copyright 2011 - 2012 Lnqq.NET.All Rights Reserved( ICP备案粤ICP备14042591号-1粤ICP14042591号 )

关于本站 - 版权申明 - 侵删联系 - Ln Studio! - 广告联系

本站资源来自互联网,仅供用户测试使用,相关版权归原作者所有

快速回复 返回顶部 返回列表