这道题是在写作业的时候遇到的,当然,对于很多大神来说肯定很简单,但是对于像我一样的初学者和菜鸟小白来说,这道题一开始真的是难到,选择记录下来纯粹是让自己理解的更深刻些,我写的时候也是在百度上搜索了下的,所以代码并不完全是我自己写的,让自己在理解一些这种算法是一方面,还有就是给后生一条出路,有必要的时候参考下,毕竟我们小白一路走过来也很辛苦,虽然大神也都是经历过这段日子!
PS:(下面的程序是我用C写的)
这道题原题是:
有两个字符串s1,s2,判断s2是否包含在s1中,函数返回s2在s1中的起始地址;否则返回0.
要求是编写函数 char* strin(char *s1,char *s2);
源程序如下:
#include<stdio.h>
#include<string.h>
char* strin(char* s1, char* s2);
void main()
{
char s1[1024] = "Mom and Day, I love you!"; //首先我先初始化两个字符串
char s2[1024] = "I love you!";
char* p = strin(s1, s2);
char* IndexS2 = strin(s1, s2);
printf("%x\n", IndexS2);
}
char* strin(char* s1, char* s2) //判断s2是否包含于s1
{
int i = 0;
int j = 0; //i是s1位置,j是s2位置
int len1 = strlen(s1);
int len2 = strlen(s2);
if (len2 > len1)
{
printf("-1\n");
}
while (i < len1 - len2 + 1)
{
while (j < len2&&s2[j] == s1[i])
{
++i;
++j;
}
if (j == len2)
{
return(&s1[i - len2]);
}
else
{
i = i - j + 1;
j = 0;
}
}
return NULL;
}