【ARM 嵌入式 C 入门及渐进 17 --字符串查找函数 strstr 介绍】

news/2024/7/23 23:48:49 标签: c语言, linux, 服务器


请阅读【嵌入式开发学习必备专栏 】


文章目录

    • 字符串查找函数 strstr

字符串查找函数 strstr

实现查找一个子字符串在父字符串中的开始和结束位置的功能,可以通过使用标准库函数 strstr() 来完成。

strstr() 函数在父字符串中搜索第一次出现子字符串的位置,如果找到,它返回子字符串的第一个字符在父字符串中的指针;如果未找到,则返回 NULL

下面是一个 C 语言函数,它接收两个字符串作为参数,一个是要搜索的父字符串 a,另一个是要找到的子字符串 sub。这个函数将返回子字符串在父字符串中的开始和结束位置:

#include <stdio.h>
#include <string.h>

typedef struct {
    int start_pos;
    int end_pos;
} Position;

Position find_substring_positions(const char *a, const char *sub) {
    Position pos = {-1, -1};  // 初始化为未找到的情形
    const char *start = strstr(a, sub);
    if (start != NULL) {
        pos.start_pos = start - a;  // 计算开始位置
        pos.end_pos = pos.start_pos + strlen(sub) - 1;  // 计算结束位置
    }
    return pos;
}

int main(void) 
{
    const char *a = "000001100110000011101110";
    const char *sub = "01100110";
    
    Position pos = find_substring_positions(a, sub);
    
    if (pos.start_pos != -1 && pos.end_pos != -1) {
        printf("Substring \"%s\" found in \"%s\" starting at position %d and ending at position %d.\n",
               sub, a, pos.start_pos, pos.end_pos);
    } else {
        printf("Substring \"%s\" not found in \"%s\".\n", sub, a);
    }
    
    return 0;
}

在这个示例中,我们定义了一个 Position 结构来存储子字符串的开始和结束位置。函数 find_substring_positions 接受两个字符串参数,使用 strstr 函数查找子字符串在父字符串中的出现,并计算出它的开始和结束位置。

main 函数中,我们为父字符串 a 和子字符串 sub 声明了两个常量字符串,并调用了函数 find_substring_positions 来获取子字符串的位置。如果找到了子字符串,它将打印出子字符串的开始和结束位置;如果没有找到,则输出相应的消息。

当编译并运行这个程序,它会输出: Substring "01100110" found in "000001100110000011101110" starting at position 5 and ending at position 12. 这表示子字符串 "01100110" 在父字符串 "000001100110000011101110" 中从位置 5 开始,在位置 12 结束。位置索引是从 0 开始的。


http://www.niftyadmin.cn/n/5454342.html

相关文章

代码随想录学习Day 18

530.二叉搜索树的最小绝对差 题目链接 讲解链接 思路&#xff1a;利用二叉搜索树的性质&#xff0c;其中序遍历序列是一个有序数组。所以先对二叉搜索树进行中序遍历&#xff0c;得到一个递增的数组后&#xff0c;再遍历整个数组&#xff0c;依次求相邻值的差&#xff0c;最…

C++ list详解及模拟实现

目录 本节目标 1. list的介绍及使用 1.2 list的使用 2.list的模拟实现 1.对list进行初步的实现 2.头插和任意位置的插入 3.pos节点的删除&#xff0c;头删&#xff0c;尾删 4.销毁list和析构函数 5.const迭代器 6.拷贝构造和赋值操作 3.完整代码 本节目标 1. list的…

自主高动态范围相位展开

💡 摘要: 基于图像的波前传感方法,如自适应修改的Gerchberg-Saxton相位恢复算法(MGS),需要一个先验相位知识的矩阵来避免在估计过程中出现高动态范围的“相位包裹”现象。以前的解包裹方法取得了有限的成功,或者需要一定程度的专家干预。我们成功地开发了一种方法和算…

基于单片机防丢失设备的设计和实践

摘要:防止老人或者小孩走丢走失,还可以放在汽车里,利用GPS系统,设计实现了基于单片机的防丢失设备。设备利用液晶显示屏显示信息,并实时发送位置短信到手机传输当前位置的纬度和经度坐标,实现了定位与监测功能。测试结果表明,利用该设备和手机可以同时观察老人或小孩携带…

JavaWeb项目——MVC架构框架

表现层&#xff08;UI&#xff09;&#xff1a;直接跟前端打交互&#xff08;一是接收前端ajax请求&#xff0c;二是返回json数据给前端&#xff09;业务逻辑层&#xff08;BLL&#xff09;&#xff1a;一是处理表现层转发过来的前端请求&#xff08;也就是具体业务&#xff09…

基于java+springboot+vue实现的超市货品信息管理系统(文末源码+Lw+ppt)23-355

摘 要 随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的超市货品信息管理系统。当前的信息管理…

django orm DateTimeField 6位小数精度问题

from django.db.backends.mysql.base import DatabaseWrapperDatabaseWrapper.data_types[DateTimeField] "datetime"意思就是重写源码里面的DateTimeField字段

[HackMyVM]靶场quick5

kali:192.168.56.104 靶机:192.168.56.134 端口扫描 # nmap 192.168.56.134 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-27 19:08 CST Nmap scan report for careers.quick.hmv (192.168.56.134) Host is up (0.000056s latency). Not shown: 998 closed tcp p…