当前位置: 首页 > article >正文

2025-03-11 学习记录--C/C++-C-返回字符串t在字符串s中首次或最后一次出现的位置、返回字符串s中第一个匹配或不匹配字符串t中任意字符的位置

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

一、C - 返回 字符串t 在 字符串s首次出现的位置 ⭐️

在这里插入图片描述

如果函数的设计目的是查找 字符串t 在字符串 s首次出现的位置,可以使用 strstr。🌈

char *search(char *s, char *t) {
    return strstr(s, t); // 使用标准库函数 strstr
}
  • 如果 s = “hello world”,t = “world”,则返回指向 “world” 的指针。

  • 如果 t = “abc”,则返回 NULL

在这里插入图片描述

#include <stdio.h>  // 包含标准输入输出库,用于使用 printf 等函数
#include <string.h> // 包含字符串处理库,用于使用 strstr 等函数

// 定义 search 函数,接收两个字符串指针 s 和 t
char *search(char *s, char *t) {
    return strstr(s, t); // 使用标准库函数 strstr 在 s 中查找 t 的首次出现位置
    // 如果找到,返回指向该位置的指针;否则返回 NULL
}

// 主函数
int main() {
    char *res; // 定义一个字符指针 res,用于存储 search 函数的返回值

    // 调用 search 函数,在字符串 "The C Programming Language" 中查找子字符串 "ram"
    // 将返回值赋值给 res
    res = search("The C Programming Language", "ram");

    // 检查 res 是否为 NULL
    if (res != NULL) { // 如果 res 不为 NULL,说明找到了子字符串
        printf("%s", res); // 打印从子字符串 "ram" 开始到字符串结束的部分
    } else { // 如果 res 为 NULL,说明未找到子字符串
        printf("Not found"); // 打印 "Not found"
    }

    return 0; // 程序正常结束
}

在这里插入图片描述

二、C - 返回 字符串t 在 字符串s最后一次出现的位置 ⭐️

在这里插入图片描述

如果函数的设计目的是查找 ts最后一次出现的位置,则需要 手动实现查找逻辑。🌈

在这里插入图片描述

// 定义 search 函数,接收两个字符串指针 s 和 t
char *search(char *s, char *t) {
    char *last = NULL; // 定义一个指针 last,用于记录 t 在 s 中最后一次出现的位置
    char *tmp = s;    // 定义一个指针 tmp,初始化为 s 的起始地址,用于遍历字符串 s

    // 使用 strstr 在 s 中查找 t 的所有出现位置
    while ((tmp = strstr(tmp, t)) != NULL) {
        last = tmp; // 如果找到 t,更新 last 为当前找到的位置
        tmp++;      // 将 tmp 向后移动一位,继续查找下一个匹配位置
    }

    return last; // 返回 t 在 s 中最后一次出现的位置;如果未找到,返回 NULL
}
  • 如果 s = “hello world, world”,t = “world”,则返回指向 第二个world” 的指针。

三、C - 返回 字符串s 中第一个匹配 字符串t 中任意字符的位置 ⭐️

在这里插入图片描述

如果函数的设计目的是查找 s 中第一个匹配 t 中任意字符的位置,可以使用 strpbrk。🌈

在这里插入图片描述

char *search(char *s, char *t) {
    return strpbrk(s, t);
}
  • 如果 s = “hello world”,t = “aeiou”,则返回指向 ‘e’ 的指针。

四、C - 返回 字符串s 中第一个不匹配 字符串t 中任意字符的位置 ⭐️

在这里插入图片描述

如果函数的设计目的是查找 s 中第一个不匹配 t 中任意字符的位置,则需要手动实现逻辑。🌈

在这里插入图片描述

// 定义 search 函数,接收两个字符串指针 s 和 t
char *search(char *s, char *t) {
    // 遍历字符串 s 的每个字符
    for (int i = 0; s[i] != '\0'; i++) {
        // 使用 strchr 在字符串 t 中查找当前字符 s[i]
        if (strchr(t, s[i]) == NULL) {
            // 如果 s[i] 不在 t 中,返回指向 s[i] 的指针
            return &s[i];
        }
    }
    // 如果 s 中的所有字符都在 t 中,返回 NULL
    return NULL;
}
  • 如果 s = “hello”,t = “hel”,则返回指向 ‘o’ 的指针。

在这里插入图片描述


http://www.kler.cn/a/581931.html

相关文章:

  • 使用 Docker 和 Nginx 实现反向代理:统一端口路由多服务的完整指南
  • Data Science Agent in Colab完全指南:AI驱动的智能数据分析助手
  • 网络安全linux命令
  • 记一次Spring Boot应用中数据库连接阻塞问题排查过程
  • AI Agent开发框架分析:前端视角
  • GStreamer —— 2.18、Windows下Qt加载GStreamer库后运行 - “播放教程 6:音频可视化“(附:完整源码)
  • 使用格式工厂提取视频中的音频
  • 智慧停车小程序:实时车位查询、导航与费用结算一体化
  • Docker换源加速(更换镜像源)详细教程(2025.2最新可用镜像,全网最详细)
  • 科技职场与文化的未来:2025年ISACA全球研究报告解读
  • 数据结构和算法--仅仅用于理解里面的术语,入门级别
  • RK3568平台开发系列讲解(内核篇)Linux kbuild编译系统
  • 万字技术指南STM32F103C8T6 + ESP8266-01 连接 OneNet 平台 MQTT/HTTP
  • ubuntu 部署deepseek
  • 【系统架构设计师】操作系统 - 进程管理 ⑤ ( 进程死锁 | 死锁 四大条件 | 死锁资源数计算 )
  • facebook游戏投广:提高广告关键数据的方法
  • Java实用注解篇:@Transactional 事务失效的场景深度解析
  • BambuStudio学习笔记:MultiMaterialSegmentation
  • 在Spring Boot项目中如何实现获取FTP远端目录结构
  • 架构师之路——设计模式篇(总览)