这个还是有点小麻烦的,我自己写的实现效果不太好,代码也很糟,然后查资料看到了比较好的算法,放在这里记录一个。
C库中有strstr()函数。其原型为:
extern char *strstr(char *str1, const char *str2);
如果匹配正确,则返回匹配正确的子串的首地址,如果匹配失败返回NULL。
#include <stdio.h>
#include <string.h>
int strstr(char * s1, char * s2) //自定义一个子串匹配的函数
{
int flag;
char * p, * q;
for(; * s1 != '\0'; s1++)
{
if (* s2 == * s1) // 判断字符串中是否有和要判断的字串首字符相同的字符
{
flag = 1;
p = s1; // s1 p为第一个相同字符的地址
q = s2;
for(; * q != '\0';) // 如果有则判断接下去的几个字符是否相同
{
if (* q++ != * p++)
{
flag = 0;
break;
}
}
}
if (flag == 1)
break;
}
return (flag);
}
int main()
{
char a[20], b[20], * p = a, * q = b;
int flag = 1;
puts("请输入两组字符串进行比较:");
gets(a);
gets(b);
puts("匹配结果:");
if(flag == strstr(strlen(a) < strlen(b) ? q : p, strlen(a) > strlen(b) ? q : p))
printf("%s 是 %s 的子串\n",strlen(a) < strlen(b) ? a : b, strlen(a) > strlen(b) ? a : b);
else
puts("匹配失败!");
return 0;
}