算法一
#include<stdio.h>
void substr(char str[80], char subs[80]);
int main()
{
char s1[80] = "Hello, World!";
char s2[80] = "Wo";
char s3[80] = "We";
substr(s1,s2);
substr(s1,s3);
return 0;
}
void substr(char str[80], char subs[80])
{
int pos = 0, i;
int len1 = 0, len2 = 0;
int found = 0;
while (str[len1]) len1++;
while (subs[len2]) len2++;
if (len2 == 0)
found = 1; //empty string is always a substring of any string
while (!found && len1 - pos >= len2)
{
// Locate the first character that equals to the first character of subs
while (str[pos] != subs[0])
pos++;
if (len1 - pos >= len2)
{
i = 0;
while (i < len2 && str[pos + i] == subs[i]) //Test whether all characters are same?
{
i++;
}
if (i == len2) //all characters are same
{
found = 1;
}
else
pos++;
}
}
if (found)
printf("\"%s\" is a substring of \"%s\" starting from position %d\n", subs, str, pos);
else
printf("\"%s\" is not a substring of \"%s\"\n", subs, str);
}
算法二:
#include<stdio.h>
#include<string.h>
int isSub(char s1[],char s2[]);
int main()
{
char s1[80] = "Hello, World!";
char s2[80] = "Wo";
char s3[80] = "We";
if(isSub(s1,s2)==1)
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}
int isSub(char s1[],char s2[])
{
int flag=1;
for(int i=0;i<strlen(s1);i++)
{
if(s1[i]==s2[0])
{
flag=1;
for(int j=0;j<strlen(s2)&&(j+i)<strlen(s1);j++)
{
if(s1[j+i]!=s2[j])
{
flag=0;
break;
}
else
{
flag=1;
}
}
}
}
return flag;
}