使用字符串进行递归::find()
Recursion with string::find()
首先,我想说是的,这是一项家庭作业,尽管我不是要求你帮我做,而是请求帮助解释它为什么会崩溃。编写一个函数subCount()
,它采用两个字符串参数"str"
和"sub"
,并检查"sub"
在"str"
中出现多少次,返回一个int,这是一个递归问题。必须使用递归。这是我使用<string>
和std
命名空间的代码。
int subCount(const string& str, const string& sub)
{
if (str.find(sub != string::npos))
{
return 1 + subCount(str.substr(1, str.length()), sub);
}
else
{
return subCount(str.substr(1, str.length()), sub);
}
}
它构建良好(使用visualstudio2012),但在尝试运行时崩溃。我怀疑我没有正确使用find()
函数,但我无法理解cplusplus.com上的引用,因为字符串参数的引用是"size_t find (const string& str, size_t pos = 0) const noexcept;"
。目前,我对find()
的理解是,如果"sub"
在str
中,那么它返回true,导致return 1 + subCount(str.substr(1), sub);
执行,如果不是,那么另一个返回语句。如果这不是find()
函数的问题,请说明问题所在,而不是如何解决。感谢您花时间阅读本文。
函数崩溃是因为空字符串上的
substr
。
函数的所有分支都递归地调用自己,并且永远不会停止。
你需要检查str
是否为空字符串,如果是,则返回0。因为这是一个家庭作业,所以我不会为你发布工作代码。
您需要检查find函数的使用情况。我无法编译你的函数。
要求是使用递归搜索模式在字符串中出现的次数。
解决方案:
- 您应该使用find func,但请记住find func返回它找到模式的位置,所以在每次成功的find()之后,您将不得不跳过搜索的部分,并在剩余的字符串中搜索
- 使用find的正确语法
str.find(sub!=字符串::npos)//这是错误的。
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- Union-Find方法性能,迭代与递归
- "find"的递归版本和非递归版本有什么区别?
- 使用字符串进行递归::find()