C语言strstr函数

目录

开头

大家好,我叫这是我58。今天,我们要学一下关于C语言里的strstr函数的一些知识。

1.什么是strstr函数

strstr函数,来自于string.h这个头文件,是一种从字符串里的定位到另一个字符串(子串)的函数,如果定位到了这个字符串的里面的另一个字符串,那么就返回在字符串里的已经定位好的另一个字符串的地址,如果这个字符串的里面没有定位到另一个字符串,那么就返回NULL,而strstr函数在C语言只能 是由这样构成的:char * strstr ( const char * str1, const char * str2)[1](#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;
}

......

结尾

在你看到这里之后,可以评论来互动一下我哦。


  1. 选自C语言中strstr函数的简介 ↩︎
相关推荐
Natsume17102 小时前
嵌入式开发:GPIO、UART、SPI、I2C 驱动开发详解与实战案例
c语言·驱动开发·stm32·嵌入式硬件·mcu·架构·github
shaun20012 小时前
华为c编程规范
c语言
MeshddY3 小时前
(超详细)数据库项目初体验:使用C语言连接数据库完成短地址服务(本地运行版)
c语言·数据库·单片机
森焱森3 小时前
无人机三轴稳定化控制(1)____飞机的稳定控制逻辑
c语言·单片机·算法·无人机
凌肖战4 小时前
力扣网C语言编程题:快慢指针来解决 “寻找重复数”
c语言·算法·leetcode
GHL2842710906 小时前
error MSB8041: 此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。
ide·visual studio
傅里叶的耶7 小时前
C++系列(二):告别低效循环!选择、循环、跳转原理与优化实战全解析
c++·visual studio
猫猫的小茶馆7 小时前
【STM32】预分频因子(Prescaler)和重装载值(Reload Value)
c语言·stm32·单片机·嵌入式硬件·mcu·51单片机
JeffersonZU7 小时前
Linux/Unix文件IO(文件描述符、原子操作、文件数据结构、open、read、write、fcntl、dup)
linux·c语言·unix·gnu
智者知已应修善业11 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机