我有一项任务要求我执行以下任务: “让一个用户输入一个字符串。然后显示这个字符串,如下所示:显示字符串中的第一个字符,然后显示最后一个字符,然后显示第二个字符,然后显示第二个字符到最后一个字符,然后显示第三个字符...所以如果字符串是“abcdef”,它会显示: afbecd(输入“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“cout”内容()/ 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];
}
答案 0 :(得分:-1)
试试这个
#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);
}
非常感谢你。它完美地运作。你认为我们需要系统(“暂停”)吗?因为我没有在代码中包含它,它仍然运行。我完全理解你的代码背后的逻辑。非常感谢。