C 检查主字符串中是否有子字符串,如果是,则从找到的子字符串开始打印主字符串
我有一个得到2个字符串的代码,它必须检查主字符串是否包含子字符串,如果包含子字符串,它将打印主字符串,但它将从子字符串的位置开始。例如,如果我的主字符串是“你好,我的名字是”,我的子字符串是“我的”,它将打印“我的名字是”作为新的主字符串 我有代码,它正在工作。但我很难理解它为什么会起作用。谁能解释一下这个函数是如何工作的吗C 检查主字符串中是否有子字符串,如果是,则从找到的子字符串开始打印主字符串,c,arrays,C,Arrays,我有一个得到2个字符串的代码,它必须检查主字符串是否包含子字符串,如果包含子字符串,它将打印主字符串,但它将从子字符串的位置开始。例如,如果我的主字符串是“你好,我的名字是”,我的子字符串是“我的”,它将打印“我的名字是”作为新的主字符串 我有代码,它正在工作。但我很难理解它为什么会起作用。谁能解释一下这个函数是如何工作的吗 char *recursiveStrStr(char *str, char *substr); 尤其是这一行: return recursiveStrStr(str +
char *recursiveStrStr(char *str, char *substr);
尤其是这一行:
return recursiveStrStr(str + 1, substr);
代码如下:
#include <stdio.h>
#include <conio.h>
int recursiveHasPrefix(char *str, char *prefix);
char *recursiveStrStr(char *str, char *substr);
int main()
{
char *str = "Yesterday all my troubles seemed so far away";
char *subStr[6] = { "Yes", "all", "my", "see", "far", "day" };
char *res;
int i;
printf("%s\n", str);
res = str;
for (i = 0; i < 6; i++)
{
printf("%s\n", subStr[i]);
res = recursiveStrStr(res, subStr[i]);
if (res == 0)
{
printf("The specified text is not found.\n");
break;
}
else
printf("The found text: %s\n", res);
}
getch();
return 0;
}
int recursiveHasPrefix(char *str, char *prefix)
{
if (*prefix == '\0')
return 1;
if (str[0] != prefix[0])
return 0;
return recursiveHasPrefix(str + 1, prefix + 1);
}
char *recursiveStrStr(char *str, char *substr)
{
int check;
if (*str == '\0' && *substr != '\0')
return 0;
check = recursiveHasPrefix(str, substr);
if (check == 1)
return str;
return recursiveStrStr(str + 1, substr);
}
#包括
#包括
int recursiveHasPrefix(char*str,char*prefix);
char*recursiveStrStr(char*str,char*substr);
int main()
{
char*str=“昨天我所有的烦恼似乎都离我很远”;
char*subStr[6]={“是”、“全部”、“我的”、“看”、“远”、“天”};
字符*res;
int i;
printf(“%s\n”,str);
res=str;
对于(i=0;i<6;i++)
{
printf(“%s\n”,subStr[i]);
res=recursiveStrStr(res,subStr[i]);
如果(res==0)
{
printf(“找不到指定的文本。\n”);
打破
}
其他的
printf(“找到的文本:%s\n”,res);
}
getch();
返回0;
}
int recursiveHasPrefix(char*str,char*prefix)
{
如果(*前缀=='\0')
返回1;
if(str[0]!=前缀[0])
返回0;
返回递归hasPrefix(str+1,prefix+1);
}
char*recursiveStrStr(char*str,char*substr)
{
整数检查;
如果(*str='\0'&&&*substr!='\0')
返回0;
检查=递归hasPrefix(str,substr);
如果(检查==1)
返回str;
返回递归strstrstr(str+1,substr);
}
ABCDEFG
CDEF
输出:
CDEFG
现在您将返回该点并打印。到底是什么让人困惑?你能指出代码的某一部分吗?我们应该能够提供帮助,但这句话的措辞让它非常宽泛。为什么不使用
strstr
来查找子字符串呢?@Catalyst我现在开始理解它了。我忘记了第一个递归只检查前缀。不知何故,如果它是主字符串的子字符串而不是主字符串的前缀子字符串,我就把它与一般的founding混淆了。我相信在一两分钟内我会弄明白的。不需要在标题中添加“[已解决]”。您通过接受答案表明了这一点。无论答案是否已发布,您可能根本不应该添加“[已解决]”。如果你自己解决了问题,你可以发布并接受自己的答案。在标题中添加“[已解决]”是其他一些论坛的惯例;这里没有完成。(请看首页上的问题列表。)
Now what your program doing?
ABCDEFG CDEF ---> Is there any common prefix such that it's length=len(CDEF)=4
No so return 0
BCDEFG CDEF --> No
CDEFG CDEF --> matches ...then go to DEFG DEF ---> EFG EF --> FG F --> G . return 1.