A部分:让用户输入一个字符串。然后显示这个字符串,如下所示:显示字符串中的第一个字符,然后显示最后一个字符,然后显示第二个字符,然后显示第二个字符到最后一个字符,然后显示第三个字符...所以如果字符串是“abcdef”,它将显示: afbecd(输入“abcdef”) 12345 - > 15243 123456 - > 162534
B部分:现在,取消上述字符串。 即162534 - > 123456
我得到A部分工作。
#include <iostream>
using namespace std;
void mash(string s);
int main()
{
string sequence;
cout << "Enter a sequence: ";
getline(cin, sequence);
mash(sequence);
}
void mash(string s)
{
int a = s.length();
if (a == 0)
{
return;
}
if (a == 1)
{
cout << s;
return;
}
cout << s[0];
if(a>1)
{
cout << s[a - 1];
s = s.substr(1,a-2);
mash(s);
}
}
但我不知道如何接近B部分。我想我可以尝试打印出偶数位置的字符,比如162534字符串,因此我会得到123.然后我想我可以尝试打印出来从最后一个到第一个的奇数位置字符,即456.组合这两个将得到原始字符串,但我不知道如何使用递归来解决B部分。
答案 0 :(得分:1)
这是一个提示。因此,unmash(string s)
应首先打印第一个字符s[0]
,然后打印unmash(s.substr(2, length - 2))
,然后打印s[1]
。当然,您还需要检查length <= 2
是否需要区别对待。
答案 1 :(得分:0)
这是我的回答,它完全得益于所有帮助我的SO成员。
#include <iostream>
using namespace std;
void unmash(string s);
int main()
{
string sequence;
cout << "Enter a sequence: ";
getline(cin, sequence);
unmash(sequence);
}
void unmash(string s)
{
int a = s.length();
if (a == 0)
{
return;
}
if (a == 1||a == 2)
{
cout << s;
return;
}
cout << s[0];
if(a>1)
{
unmash(s.substr(2));
cout << s[1];
}
}