【ARM 嵌入式 C 入门及渐进 17 --字符串查找函数 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 开始的。

最近更新

  1. TCP协议是安全的吗?

    2024-03-28 02:14:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-28 02:14:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-28 02:14:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-28 02:14:02       20 阅读

热门阅读

  1. docker构建镜像时可能会用到的自启动命令

    2024-03-28 02:14:02       17 阅读
  2. WSL+Ununtu+Docker踩坑指南

    2024-03-28 02:14:02       17 阅读
  3. 【Python】定时更换clashx工具

    2024-03-28 02:14:02       21 阅读
  4. C语言学习笔记day15

    2024-03-28 02:14:02       19 阅读
  5. 116道网络安全面试题目总结

    2024-03-28 02:14:02       17 阅读
  6. 幸运儿(C语言)

    2024-03-28 02:14:02       18 阅读
  7. 磁盘阵列技术

    2024-03-28 02:14:02       18 阅读
  8. 【Linux】学习笔记~

    2024-03-28 02:14:02       17 阅读
  9. Linux查询日志常用命令整理

    2024-03-28 02:14:02       16 阅读
  10. C++ 大三/大五法则(__cplusplus 前向兼容)

    2024-03-28 02:14:02       22 阅读
  11. Linux编辑器-vim使用

    2024-03-28 02:14:02       17 阅读
  12. 纯CSS实现首尾相接的无限轮播效果

    2024-03-28 02:14:02       18 阅读
  13. 嵌入式Linux:空洞文件

    2024-03-28 02:14:02       19 阅读
  14. MySQL中的窗口函数

    2024-03-28 02:14:02       19 阅读
  15. 【嵌入式DIY实例】-火焰报警系统

    2024-03-28 02:14:02       20 阅读