【发布时间】:2014-03-23 17:46:15
【问题描述】:
我们有一个任务来创建带有两个字符串参数的递归函数,原型应该是这样的:
int instring(char* word, char* sentence);
如果我们调用函数:
instring("Word", "Another Word");
它应该有以下返回值:
- 如果找到该单词,它将返回在以下位置找到该单词的位置
- 如果找不到该单词,它将返回 -1
我可以使用保存位置的第三个参数来做到这一点,但不幸的是,我们不允许使用超过 2 个参数。
所以问题是如何让它发挥作用? 到目前为止,这是我想出的:
int instring(char* word, char* sentence) {
if (*word == '\0') {
return 0;
} else if (*word != '\0' && *sentence == '\0') {
return -1;
} else {
if (*word == *sentence) {
instring(word+1, sentence+1);
} else {
instring(word, sentence+1);
}
}
}
如果可以找到“单词”,我得到 0,否则我得到 -1。由于我无法跨函数调用存储任何值,因此我无法获得“单词”字符串的开始位置。 除了外部变量并且只有两个输入字符串之外,还有其他方法可以获取位置吗?
【问题讨论】:
-
当您递归调用
instring()时,您应该return其结果(将值“传递”回顶部)。 -
@Cornstalks 我做了这样的事情:
return 1+instring(word, *(sentence));但在有字符串的情况下,我只是得到全长。你是这个意思吗?我无法理解它...... -
@Kevin 好的,很有趣。我曾用“strlen”尝试过,但没有像我预期的那样工作。我的函数不会在每次执行时都调用“strlen”吗?
-
你能在函数体内使用循环吗?我可以想到一种简单的方法,它使用循环和递归调用......
-
我认为您必须担心您的递归方案在
"Wrong parts of the data"中找到"Word";当方案找到W时,会在"rong parts of the data"中递归查找"ord",跳过r后会找到o,然后在parts中找到r,然后@ 987654336@data。因此,您必须在返回成功之前检查递归调用的返回值是否为 0。您在将比赛的正确位置传递回调用函数时也存在问题。