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

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日

相关文章

  • Node.js API详解之 net模块实例分析

    首先,我们需要了解什么是Node.js的API。API全称是Application Programming Interface,它是软件系统不同组件之间的交互接口。Node.js提供了一个强大的API库,包括了许多内置的模块,来支持应用程序的开发与部署。其中net是Node.js提供的一个核心模块,它提供了一个异步的网络接口,用于创建TCP和UNIX客户端/…

    C 2023年5月23日
    00
  • Qt 中开启线程的多种方式小结

    针对这个话题,我将会为大家提供一个完整的攻略。首先,我们需要明确的是,Qt 中开启线程的方式有多种,每种方式都有其优缺点,下面我将一一进行介绍。 方式一:继承 QThread 类 继承 QThread 类是使用 Qt 开启线程最为常见的方式之一。具体步骤如下: 定义一个继承自 QThread 的线程类,并重写其 run() 方法,在 run() 方法内实现我…

    C 2023年5月22日
    00
  • ubuntu下如何安装cmake?cmake简单使用详解

    下面是详细的攻略: 安装cmake的方法 在Ubuntu系统中,我们可以使用apt-get命令来安装cmake。具体步骤如下: 打开终端,输入以下命令: sudo apt-get update 该命令用于更新Ubuntu系统中的软件包信息,确保我们能够获得最新的cmake软件包。 安装cmake,输入以下命令: sudo apt-get install cm…

    C 2023年5月24日
    00
  • php中json_decode()和json_encode()的使用方法

    关于 PHP 中 JSON 数据的编码和解码,通常会使用两个函数 json_encode() 和 json_decode()。 json_encode() 的使用方法 json_encode() 函数是将 PHP 中的数据转为 JSON 字符串的方法。它的语法如下: json_encode($value, $options = 0, $depth = 512…

    C 2023年5月23日
    00
  • C语言 文件的随机读写详解及示例代码

    C语言文件的随机读写是一项重要的编程技巧,可以帮助你在处理大型文件时准确地定位和读取其中特定的数据。下面,我将为您提供完整的攻略,涉及的内容包括: 打开文件并定义文件指针; 利用fread()函数进行随机读取文件; 利用fwrite()函数进行随机写入文件; 通过fclose()函数关闭文件。 打开文件并定义文件指针 在C语言中,打开文件需要使用fopen(…

    C 2023年5月24日
    00
  • ajax实现动态下拉框示例

    讲解“ajax实现动态下拉框示例”的完整攻略如下: 一、什么是ajax Ajax 是一种在无需重新加载整个页面的情况下,能够更新部分网页的技术。它通过与服务器进行异步数据交互,无需重载整个页面就能够更新部分页面的数据。 二、ajax实现动态下拉框示例 1. 前端页面 首先,在HTML页面的<head>标签中引入jQuery库。然后,在HTML页面…

    C 2023年5月23日
    00
  • C语言快速幂取模算法小结

    C语言快速幂取模算法小结 快速幂算法是用来加速计算 a^n 的算法,它可以使计算复杂度从O(n)降为O(logn),因此在需要对 a^n 进行大量计算时非常有用。而在取模运算中,快速幂算法同样适用,因为我们可以在计算时对中间结果进行模运算的操作,这样可以避免数值溢出。 算法说明 快速幂取模算法的实现中主要有以下几个步骤: 如果n等于0,直接返回1。 如果n为…

    C 2023年5月23日
    00
  • C语言 结构体

    下面就为大家详细讲解一下“C语言 结构体”的使用攻略。 C语言 结构体 结构体是C语言中一种自定义的数据类型,用于存储一组多个不同类型的数据,相比于数组在存储不同类型数据时的不足,结构体能够更加灵活地组合多个类型的数据。一个结构体被定义后,可以使用点运算符 . 来访问其各个成员。 结构体的定义 定义一个结构体需要使用 struct 关键字,结构体跟类型名之间…

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