strstr函数的使用和模拟实现
strstr函数的定义
char * strstr ( const char * str1, const char * str2);
- Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1.(函数返回字符串str2在字符串str1中第⼀次出现的位置)。
- The matching process does not include the terminating null-characters, but it stops there.(字符串的⽐较匹配不包含 \0 字符,以 \0 作为结束标志)。
strstr函数的使用
程序
/* strstr example1 */ #include <stdio.h> #include <string.h> int main() { char str[] = "This is a simple string"; const char* pch = "is"; //char* ret = strstr(str, pch);//和下面效果一样 char* ret = strstr(str, "is"); if (ret != NULL) { printf("%s\n", ret); } return 0; }
/* strstr example2 */ #include <stdio.h> #include <string.h> int main() { char str[] = "This is a simple string"; char* pch; //首先利用strstr查看str中是否存在simple,如果存在返回str中"simple"的首元素地址 //也就是s的地址给pch pch = strstr(str, "simple"); //把"sample"拷贝到pch所指的位置,拷贝6个字符后停止 strncpy(pch, "sample", 6); //打印str,"This is a simple string"已经变成"This is a sample string" printf("%s\n", str); return 0; }
strstr函数的模拟实现
//模拟实现 #include <stdio.h> #include <string.h> #include <assert.h> char* my_strstr(const char *arr1, const char *arr2) { char* s1 = NULL; char* s2 = NULL; char* cur = arr1; if (arr2 == '\0') { return (char *)arr1; } while (*cur) { s1 = cur; s2 = arr2; while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2) { s1++; s2++; } if (*s2 == '\0') { return (char *)cur; } cur++; } return NULL; } int main() { char arr1[] = "abcdefabcdef"; char arr2[] = "cdef"; char* ret = my_strstr(arr1, arr2); if (ret == NULL) { printf("找不到!\n"); } else { printf("找到了:%s\n", ret); } return 0; }