C++ C++;带字符串的递归扫描
我正在做一个使用递归的作业。我在理解递归方面仍然有点困难,或者至少它是如何工作的,但我想我已经开始掌握它了,尽管我不太清楚为什么任何东西都能工作 我的作业分为两部分,但目前,我只需要在第一部分得到一些帮助。我要做的是: 编写一个递归函数,返回C字符串中第一次出现>字符的位置 这就是我目前所拥有的C++ C++;带字符串的递归扫描,c++,recursion,C++,Recursion,我正在做一个使用递归的作业。我在理解递归方面仍然有点困难,或者至少它是如何工作的,但我想我已经开始掌握它了,尽管我不太清楚为什么任何东西都能工作 我的作业分为两部分,但目前,我只需要在第一部分得到一些帮助。我要做的是: 编写一个递归函数,返回C字符串中第一次出现>字符的位置 这就是我目前所拥有的 #include <stdio.h> #include <string> #include <iostream> using namespace std; int t
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int test(string s, char x);
int main ()
{
test("lets test for the letter s", "s" );
}
int test(string s, char x)
{
if(s.length() == 0)
return 0;
else if (s[0] == x)
return 1 + test(s.substr(1, s.length()), x);
else
return test(s.substr(1, s.length()), x);
}
#包括
#包括
#包括
使用名称空间std;
int测试(字符串s,字符x);
int main()
{
测试(“让我们测试字母s”、“s”);
}
int测试(字符串s,字符x)
{
如果(s.length()==0)
返回0;
如果(s[0]==x),则为else
返回1+测试(s.substr(1,s.length()),x);
其他的
返回测试(s.substr(1,s.length()),x);
}
所以我认为这应该是可行的,但我有点困惑,如何让函数测试任何东西。我很确定我在main中的函数调用中正确地完成了字符串部分,但是我无法让char接受值。按照我的理解,我应该输入要扫描的文本,然后输入要查找的字符。谁能告诉我我做错了什么,甚至我对递归函数的理解都很接近吗?字符常量用单引号引起来。要测试函数,请编写如下代码:
cout << test("lets test for the letter s", 's') << endl;
如果字符串为空,则找不到字符。我建议返回-1而不是0,因为返回值为0表示(对我来说)字符位于位置0-1是这样的函数在找不到字符时的传统返回码
else if (s[0] == x)
return 0;
你明白为什么这是返回0
?您在索引0处找到了字符x
,因此您应该返回:0
else
return 1 + test(s.substr(1, s.length() - 1), x);
最后一个测试是唯一需要递归的测试。这里是放置
1+
的位置。您还需要将length()
减少1。字符常量用单引号括起来。要测试函数,请编写如下代码:
cout << test("lets test for the letter s", 's') << endl;
如果字符串为空,则找不到字符。我建议返回-1而不是0,因为返回值为0表示(对我来说)字符位于位置0-1是这样的函数在找不到字符时的传统返回码
else if (s[0] == x)
return 0;
你明白为什么这是返回0
?您在索引0处找到了字符x
,因此您应该返回:0
else
return 1 + test(s.substr(1, s.length() - 1), x);
最后一个测试是唯一需要递归的测试。这里是放置
1+
的位置。您还需要将length()
减少1。您应该执行以下操作:
int main ()
{
test("lets test for the letter s", 's');
//should pass char constant
//not string literal for second parameter
}
int test(string s, char x)
{
if(s.length() == 0)
return 0;
else if (s[0] == x)
return 1 + test(s.substr(1, s.length()-1), x);
//^^^second parameter of substring is length
else
return test(s.substr(1, s.length()), x);
}
您应该执行以下操作:
int main ()
{
test("lets test for the letter s", 's');
//should pass char constant
//not string literal for second parameter
}
int test(string s, char x)
{
if(s.length() == 0)
return 0;
else if (s[0] == x)
return 1 + test(s.substr(1, s.length()-1), x);
//^^^second parameter of substring is length
else
return test(s.substr(1, s.length()), x);
}
“s”将被视为字符数组或字符串。要表示单个字符,应使用“s”
int main ()
{
cout << "location = " << test("lets test for the letter s", 's' );
^^^^
}
int main()
{
cout“s”将被视为字符数组或字符串。要表示单个字符,应使用“s”
int main ()
{
cout << "location = " << test("lets test for the letter s", 's' );
^^^^
}
int main()
{
哈哈!没错!我从来没有想过对这个角色使用一个引号,我可能会为此痛苦一周,非常感谢!@CharlieM很高兴我能帮上忙。检查其他答案,了解你的递归问题。哈哈!没错!我从来没有想过对这个角色使用一个引号,我很高兴很可能会为此痛苦一个星期,非常感谢!@CharlieM很高兴我能帮上忙。检查其他答案,了解你的递归问题。我最终选择了这辆车我最终选择了这辆车你的右边,我在前面突然出现了一个s,它一起跳过了,然后去数一数下一辆车。谢谢,我永远也不会明白。递归目前对我来说还是有点狡猾。你的权利,我只是在前面突然出现了一个s,它一起跳过了,然后去数一数下一个。谢谢,我永远也不会明白。递归目前对我来说还是有点狡猾。