C语言模拟实现strstr函数的示例代码

yizhihongxing

C语言中的strstr函数是用来查找一个字符串中是否包含另一个字符串的函数,其原型定义如下:

char *strstr(const char *haystack, const char *needle);

其中,haystack表示要查找的字符串,needle表示要搜索的子字符串。该函数返回子字符串在要查找的字符串中第一次出现的位置的指针,如果没有找到,则返回NULL。

以下是模拟实现strstr函数的示例代码:

char *my_strstr(const char *str1, const char *str2)
{
    const char *s1 = str1;
    const char *s2 = str2;

    if (!(*str2)) return (char *) str1;

    while (*s1)
    {
        if (!(*s2))
            return (char *) str1;

        if (*s1 == *s2)
            s2++;
        else
        {
            s1 -= s2 - str2;
            s2 = str2;
        }

        s1++;
    }

    return (char *) NULL;
}

在该代码中,首先定义了两个指针s1和s2,分别指向要查找的字符串str1和要搜索的子字符串str2的起始位置。然后,如果子字符串str2为空,就直接返回字符串str1。接着,使用while循环逐个比较字符串s1和s2的字符是否相等,如果相等,就将指针s2向后移动一位,否则将指针s1向后移动到上次比较开始的下一个位置,同时将指针s2重新指向子字符串的起始位置。

下面通过两个示例说明如何使用上述代码模拟实现strstr函数。

第一个示例:

#include <stdio.h>

int main(void)
{
    char str1[20] = "Hello world";
    char str2[10] = "world";

    char *result = my_strstr(str1, str2);

    if (result == NULL)
        printf("Not found\n");
    else
        printf("Found at %d\n", result - str1 + 1);

    return 0;
}

在上述示例中,定义了一个包含字符串"Hello world"的字符数组str1和一个包含字符串"world"的字符数组str2,然后调用my_strstr函数查找str2在str1中的位置,最后打印出找到的位置。

第二个示例:

#include <stdio.h>

int main(void)
{
    char str1[20] = "Hello world";
    char str2[10] = "abc";

    char *result = my_strstr(str1, str2);

    if (result == NULL)
        printf("Not found\n");
    else
        printf("Found at %d\n", result - str1 + 1);

    return 0;
}

在上述示例中,仍然定义了一个包含字符串"Hello world"的字符数组str1,但是定义的字符数组str2中包含了一个不存在于str1中的子字符串"abc",因此调用my_strstr函数返回NULL,并打印出"Not found"。

通过以上两个示例,可以看到模拟实现strstr函数的代码能够正确地识别要搜索的子字符串是否存在于要查找的字符串中,并返回正确的位置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言模拟实现strstr函数的示例代码 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • C++演讲比赛管理系统实现流程实例

    C++演讲比赛管理系统实现流程实例 系统需求 演讲比赛管理系统要求具有以下功能: 实现学生信息的录入:包括学号、姓名、年龄等信息。 实现教师信息的录入:包括工号、姓名、年龄、职称等信息。 实现选手报名:包括姓名、年龄、比赛成绩等信息。 实现比赛的评分:包括裁判打分、选手得分等信息。 实现比赛成绩的排序和输出:包括选手名次、得分等信息。 类的设计 根据系统需求…

    C 2023年5月23日
    00
  • C语言中如何进行运算?

    在C语言中,运算是指将一个或多个操作数结合在一起并应用特定的运算符以生成一个结果。C语言中支持多种运算类型,如算术运算、赋值运算、比较运算、逻辑运算等。 算术运算 C语言中的算术运算包括加、减、乘、除、取模等操作。其中,加、减、乘、除分别对应运算符 +、-、*、/,取模使用运算符%。下面是算术运算的示例代码: #include<stdio.h> …

    C 2023年4月27日
    00
  • C语言中静态和动态内存分配的区别

    C语言中的静态和动态内存分配是两种不同的方式,下面我们就来详细讲解一下静态和动态内存分配的区别。 静态内存分配 静态内存分配是指在程序编译阶段就已经确定了变量的内存空间,并在程序运行时一直存在的内存空间。静态内存分配只会在程序启动时进行一次,并在整个程序运行期间都存在。静态内存分配的变量通常包括全局变量、静态变量和局部静态变量。静态内存分配的变量在程序启动时…

    C 2023年5月10日
    00
  • PHP高精确度运算BC函数库实例详解

    PHP高精确度运算BC函数库实例详解 本文将详细讲解PHP中高精度运算的实现方式,主要使用的是BC函数库。BC函数库是PHP中一个集成了多种精度运算的工具,拥有高精度计算、小数位控制等功能,可以帮助我们方便地完成高精度计算。 安装和使用 安装BC函数库非常简单,只需要在PHP中开启bcmath扩展即可。具体安装方式可以参考官方文档。 在开启扩展后,我们就可以…

    C 2023年5月22日
    00
  • Java中异常处理之try和catch代码块的使用

    针对“Java中异常处理之try和catch代码块的使用”,这里提供一些完整的攻略和示例: 异常处理的概念 在编写Java程序时,可能会出现一些异常情况,例如:输入的数据格式不正确、文件不存在等。异常指程序运行时发生了一些不易处理的错误情况,这些错误情况常常导致程序无法正常运行,也可能导致程序崩溃。为了保证程序的稳定性,Java提供了异常处理机制,让程序在出…

    C 2023年5月23日
    00
  • Ruby中Time对象的常用函数总结

    Ruby中Time对象的常用函数总结 Ruby中Time对象是一个表示时间的类,它提供了一系列常用的函数来方便处理时间相关的操作。在本文中,我们将为大家总结一下Ruby中Time对象的常用函数及其用途。 获取当前时间 我们可以使用Time.now函数来获取当前时间。 current_time = Time.now puts current_time 输出结果…

    C 2023年5月23日
    00
  • GCC 指令详解及动态库、静态库的使用方法

    GCC 指令详解及动态库、静态库的使用方法 GCC 是一个重要的编译器套件,可用于编译包含多种语言的程序。在本文中,我们将深入探讨 GCC 的一些重要指令,并详细介绍动态库和静态库的使用方法,以帮助读者更好地了解和使用 GCC。 GCC 的一些重要指令 编译源代码 GCC 的最常用指令之一就是编译源代码。要编译一个源代码文件,并生成一个可执行文件,可以使用以…

    C 2023年5月23日
    00
  • C 标准库 locale.h

    locale.h 是C标准库中的一个头文件,它提供了本地化对字符串、格式等的处理支持。本文将介绍 locale.h 的完整使用攻略。 1. 包含头文件 使用 locale.h 需要先包含这个头文件。在代码中可以直接使用如下语句来包含: #include <locale.h> 2. 设置本地化环境 locale.h 为我们提供了setlocale(…

    C 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部