头文件:
string.h
函数的声明:
char *strstr( const char *str1, const char *str2 )
字符串 可能的子串
返回值:
如果str2在str1中出现,返回str2第一次出现在str1的位置的地址
如果str2没有在str1中出现,返回NULL空指针
用法:
给两个字符串,第一个为字符串,第二个为要判断的子串
实例:
#include<stdio.h>
#include<string.h>
int main() {
char str1[] = "abcijkghijk";//仅返回第一次出现子串的地址
char str2[] = "ijk";
strstr(str1, str2);
char* ret = strstr(str1, str2);
if (NULL == ret) {
printf("找不到字符串\n");
}
else {
printf("找到了\n");
printf("%s\n", ret);//并把之后的字符打印
}
return 0;
}
函数的实现:
#include<stdio.h>
#include<string.h>
char* my_strstr(char* str1, char* str2) {
char* s1 = 0;
char* s2 = 0;
char* p = str1;
while (*p != '\0') {//跳出此循环则证明以查找完原字符串,无子串
s1 = p;
s2 = str2;
while (*s1 && *s2 && *s1 == *s2) {//保证*s1!='\0', *s2!='\0', *s1==*s2才可以运行
s1++; // s1未到字符串末 s2未到字符串末 *s1与*s2相同时
s2++;
}
if (*s2 == '\0') {//找到子串
return p;
}
p++;
}
return NULL;
}
int main() {
char str1[] = "abbbcbdef";
char str2[] = "bbc";
my_strstr(str1, str2);
char* ret = strstr(str1, str2);
if (NULL == ret) {
printf("找不到字符串\n");
}
else {
printf("找到了\n");
printf("%s\n", ret);//并把之后的字符打印
}
return 0;
}
直到*s2=‘\0’时结束循环,通过判断if (*s2 == '\0')返回子串首地址
若整个过程没有轮到*s2=‘\0’,则证明没有子串,同时也应有*p='\0',原字符串查找完,没有子串,返回空指针NULL