挑战面试编程:字符串匹配的双重递归式写法
字符串的匹配有很高效的KMP、Sunday等算法,可供使用。下面使用的匹配算法本质上是朴素的,但它的双重递归式的写法仍然值得借鉴。
完整示例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *SubStrWithR(const char *str, const char *sub)
{
if (str == NULL || sub == NULL)
return NULL;
int find = isSame(str, sub);
if (find)
return str;
if (*str)
return SubStrWithR(str + 1, sub);
else
return NULL;
}
int isSame(const char *str, const char *sub)
{
if (*sub == '\0')
return 1;
return (*str == *sub) && isSame(str + 1, sub + 1);
}
int main()
{
char str[] = "tasklist";
printf("pattern string: \n");
puts(str);
char sub[20];
printf("Input a substring: ");
scanf("%s", sub);
while(strcmp(sub, "exit"))
{
char *find = SubStrWithR(str, sub);
if (find == NULL)
printf("Not found!\n");
else
printf("%p, %s\n", find, find);
printf("Input a substring : ");
scanf("%s", sub);
}
return 0;
}
运行
所有内容的目录