目录
开头
大家好,我叫这是我58。今天,我们要学一下关于C语言里的strstr
函数的一些知识。
1.什么是strstr
函数
strstr
函数,来自于string.h
这个头文件,是一种从字符串里的定位到另一个字符串(子串)的函数,如果定位到了这个字符串的里面的另一个字符串,那么就返回在字符串里的已经定位好的另一个字符串的地址,如果这个字符串的里面没有定位到另一个字符串,那么就返回NULL
,而strstr
函数在C语言 中只能 是由这样构成的:char * strstr ( const char * str1, const char * str2)
^1^,其中,str1
代表了从哪定位要定位的字符串,str2
则代表了刚才所提到的要定位的字符串"" ,也称子串。那么,在看完strstr
函数的介绍后,就看一下strstr
的内部吧。
2.strstr
函数的内部
程序
c
char* strstr(const char* cp, const char* cpa) {
char* cpb = cp;
char* cpc = cpa;
for (; *cp; cp++) {
for (cpb = cp, cpc = cpa; *cpc; cpb++,cpc++) {
if (*cpb != *cpc) {
break;
}
}
if (!*cpc) {
return cp;
}
}
return NULL;
}
流程图
strstr
函数 是 是 是(break) 是(返回cp) 否 否 否 否(返回空指针) 结束 开始 定义字符指针cpb为cp 定义字符指针cpc为cpa *cp? 设cpb为cp 设cpc为cpa *cpc? *cpb != *cpc? !*cpc? 把cpb向右移动一位 把cpc向右移动一位 把cp向右移动一位
3.strstr
函数的实际运用
判断一个字符串是否包含另一个字符串
c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main() {
char str[99] = "";
char stra[99] = "";
scanf("%s %s", str, stra);
printf("%s", strstr(str,stra) ? "YES\n" : "NO\n");
return 0;
}
判断一个字符串是否由另一个字符串旋转得来的
c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int IsStrSpin(char* str, char* stra) {
if (strlen(str) != strlen(stra)) {
return 0;
}
strncat(str, str, strlen(str));
return !!strstr(str, stra);
}
int main() {
char str[99] = "";
char stra[99] = "";
scanf("%s %s", str, stra);
printf("%s",IsStrSpin(str, stra) ? "YES\n" : "NO\n");
return 0;
}
定位一个字符串的子串
c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main() {
char str[99] = "";
char stra[99] = "";
scanf("%s %s", str, stra);
char* cp = strstr(str, stra);
cp && printf("%s在%s的首元素的下标:%d", stra, str, cp - str), cp || printf("%s在%s的首元素的下标:NULL",stra,str);
return 0;
}
......
结尾
在你看到这里之后,可以评论来互动一下我哦。