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日

相关文章

  • json error: Use of overloaded operator [] is ambiguous错误的解决方法

    这个错误常见于C++中使用json类型的数据。当使用json类型的数据时,如果没有包含正确的头文件并正确使用命名空间,则会出现“json error: Use of overloaded operator [] is ambiguous错误的解决方法”的错误。 以下是解决这个错误的步骤: 包含正确的头文件 在使用json数据时,必须使用正确的头文件。最常用的…

    C 2023年5月23日
    00
  • C语言实现推箱子项目

    下面是“C语言实现推箱子项目”的完整攻略: 一、项目介绍 推箱子是一款经典的游戏,这里将通过C语言来实现这个项目。游戏的主要玩法是玩家控制一个人物推着多个箱子走到特定的位置。要求箱子能够被推到指定的位子,不能被推到障碍物上,也不能被推到死路上。本项目主要使用C语言中的字符数组和指针操作等相关知识。 二、实现过程 游戏地图设计 游戏地图是一个二维数组。玩家需要…

    C 2023年5月23日
    00
  • 电脑无法启动并提示0xc000000e怎么办

    电脑无法启动并提示0xc000000e的解决方法 问题描述 当电脑启动时,可能会出现以下错误信息: Windows Failed to start. A recent hardware or software change might be the cause. To fix the problem: 1. Insert your Windows insta…

    C 2023年5月23日
    00
  • C++代码实现逆波兰表达式

    下面我来给您详细讲解C++代码实现逆波兰表达式的完整攻略。 什么是逆波兰表达式 逆波兰表达式,也叫后缀表达式,在数学、计算机科学中是一种存储和计算算术表达式的方法,其中每个运算符都跟在它的操作数之后。逆波兰表达式不需要括号来标识操作符的优先级。这种语法结构可避免我们所谓的”运算符优先级”。 举个例子,中缀表达式:1 + 2 * 3 – 4 / 2 的逆波兰表…

    C 2023年5月24日
    00
  • 2048小游戏C语言实现代码

    首先,2048小游戏是一款经典的益智游戏,玩家需要通过合并数字达到2048的目标。对于C语言实现,代码可以分为几个部分:界面显示、随机数字生成、输入处理、数字移动和合并、判断游戏是否结束。 界面显示 为了在终端中显示2048的游戏界面,我们需要使用C语言的库函数ncurses。首先,需要安装ncurses库,在Ubuntu系统下使用以下命令安装: sudo …

    C 2023年5月24日
    00
  • C语言实现文件操作实例(简单图示讲解)

    下面是关于“C语言实现文件操作实例(简单图示讲解)”的完整攻略。 操作流程 打开文件 用fopen函数打开文件,语法如下: FILE *fopen(const char *filename, const char *mode) 其中,filename是要打开的文件名,mode是打开文件的模式(例如读取、写入、追加等),返回值是文件指针,用于后续操作。 读取文…

    C 2023年5月23日
    00
  • 华为MateBook D 14锐龙版值得买吗 华为MateBook D 14锐龙版笔记本全面评测

    华为MateBook D 14锐龙版值得买吗 简介 华为MateBook D 14锐龙版已经上市一段时间了,不过很多人仍然不确定是否值得购买。本文将从外观、性能、续航、售价等多个角度进行分析评测,帮助大家了解这款笔记本是否适合自己。 外观 华为MateBook D 14锐龙版采用了全金属机身,简约大气,颜值在线。相比于其他同价位的笔记本,华为MateBook…

    C 2023年5月22日
    00
  • C++文件读写代码分享

    C++文件读写代码分享 在C++中,可以通过文件读写来实现将程序处理过的数据存储起来,或者是从外部文件读取数据。本文将介绍C++中文件读写的相关内容,包括文件的打开、读写、关闭等操作,同时提供两个示例供参考。 文件的打开与关闭 文件的打开与关闭是文件读写操作的前提,只有先打开文件,才能够进行文件的读写,读写完成后,还要关闭文件,以释放文件系统资源。 打开文件…

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