String mash (recursion) C++
String mash (recursion) C++
我有一个作业,要求我做以下任务:"让用户输入一个字符串。然后按如下方式显示这个字符串:显示字符串中的第一个字符,然后是最后一个,然后是第二个,然后是倒数第二个,然后是第三个……所以如果字符串是" abcdef ",它将显示:(输入"abcdef")这是我的方法,但它没有运行。我有一个分割错误11.
#include <iostream>
#include <cmath>
using namespace std;
void printLetters(string s);
int main()
{
string sequence;
cout << "Enter a sequence: ";
getline(cin, sequence);
printLetters(sequence);
}
void printLetters(string s)
{
int a = floor(s.length()/2.0);
// stopping case
if(s == "")
{
return;
}
// reduce problem
printLetters(s.substr(0));
//cout << s[0];
cout << s[a];
}
例如:12345。在我的函数printLetters(string s)中,我打印出从索引0开始的字符串,然后我得到完整的字符串12345。然后,我"计算"索引s.length()/2处的内容,即中间的字符"3"。然后回到字符串,继续打印从索引0开始的子字符串,但这次,它是1245。我一直重复这些步骤,直到得到1。在课上,我的教授解释过当递归过程结束时,它会从底部回到顶部。当我到达1的时候,它会回到5 2 3 4。所以我假设我会打印出字符串"15234",但我没有。如果你有什么想法,我很乐意倾听。非常感谢!
下面是另一个用于反转字符串的代码。我的教授在课堂上解释了,这就是他在代码背后给出的逻辑。
#include <iostream>
using namespace std;
void printString(string s);
int main()
{
printString("hello");
return 0;
}
void printString(string s)
{
if(s == "")
{
return;
}
printString(s.substr(1));
cout << s[0];
}
试试这个
#include <iostream>
#include <string>
using namespace std;
void printLetters(string s);
int main()
{
string sequence;
cout << "Enter a sequence: ";
getline(cin, sequence);
printLetters(sequence);
cout << endl;
system("pause");
}
void printLetters(string s)
{
int a =s.length();
if (a == 0)
{
return;
}
cout << s[0];
if(a>1)
cout<< s[a - 1];
s.erase(0, 1);
a = s.length();
if(a>1)
s.erase(a-1);
printLetters(s);
}
非常感谢。效果很好。你认为我们需要系统("暂停")吗?因为我没有将它包含在代码中,但它仍然运行。我完全理解你代码背后的逻辑。非常感谢。