版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YangZuo_Chester/article/details/78046714
突然想起小学期里字符串子串判断的题目,之前的写法是用循环匹配,总感觉写法欠妥
试着用递归写了一次子串匹配,就当换个思路吧
运行图:
代码:
#include<stdio.h>
void judge_strings(char* string,char* subString,int p_string,int p_subString,int &result)
{//每次对当前位置的string和subString进行字符匹配,如果相同就继续循环,不同就退出
if (subString[p_subString] == '\0')
{
result = 1;
return;
}
if (string[p_string] == subString[p_subString])
{
judge_strings(string, subString, p_string + 1, p_subString + 1,result);
}
}
int main()
{
char string[100]; //存储较长的字符串
char subString[20]; //存储子串用来判断
int i_string = 0; //长字符串的计数变量
int i_subString = 0;//子串的计数变量
int result = 0; //匹配结果
puts("\tInput a long string:");
scanf("%s", string);
puts("\tInput a short one:");
scanf("%s", subString);
while (string[i_string] != '\0')//长字符串循环
{
if (string[i_string] == subString[i_subString])//i_subString确认相等的时候应该等于0
{
judge_strings(string, subString,i_string,i_subString,result);
if (result == 1)
break;
}
++i_string;
i_subString = 0;//保证每次循环subString的计数变量一直为0
}
//输出结果
if (result == 1)
{
printf("[%s] IS a substring of [%s].\n", subString,string );
}
else
{
printf("[%s] is NOT a substring of [%s].\n",subString,string);
}
getchar();
getchar();
return 0;
}