#include <stdio.h>
#include <string.h>
void putOneByOneP(char *s);
char *strstrM1 (char str[], char mod[]);
char *strstrM2 (char str[], char mod[]);
int main(void)
{
char s[] = "What's your name?";
char s2[] = "name";
putOneByOneP(s);//打印每个字符地址,以便检查strstr()函数是否正确工作
char *p = strstrM2(s, s2);//strstr()函数返回索引,以下校验的结果
if(p != NULL)
printf("%s找到了%s!返回地址%p,存储的是 %c\n", s, s2, p, *p);
else
printf("%s未找到%s!\n",s, s2);
printf("%s", (p != NULL) ? "真的找到了!\n":"真的没找到!\n");//较为简明的检验
return 0;
}
void putOneByOneP(char *s)
{
char *p =s;//最后要用s初始值,所以用p拷贝一份
while (*s != '\0')
{
printf("[%c] %p\n", *s, s);
++s;
}
}
char *strstrM1 (char str[], char mod[])
{
char *s = str, *m = mod;//没必要的城市化,但能明确意图
for (;*str != '\0'; ++str)
{
for (s = str, m = mod; *m != '\0' && *s == *m; ++s,++m)
;
if (*m == '\0')
return (char *)str;
}
return NULL;
}
char *strstrM2 (char str[], char mod[])
{
int i, j, k;
for (i = 0; str[i]!= '\0'; ++i)
{
for (j = 0,k = i; mod[j] != '\0' && str[k] == mod[j]; ++j, ++k)
;
if (mod[j] == '\0')
return &str[i];
}
return NULL;
}