首页 > 其他分享 >实现在一个字符串中查找另一个字符串的功能

实现在一个字符串中查找另一个字符串的功能

时间:2024-10-26 23:45:02浏览次数:6  
标签:一个 char 地址 查找 ----- str 字符串

题目:

实现字符串函数strstr的功能,在一个字符串中查找另一个字符串,若查找到则返回子串第一次出现的地址,若查找不到返回NULL。

解题思路:

在一个字符串(假设为str1)中查找另一个字符串(假设为str2)。思路是遍历整个字符串str1,如果出现与字符串str2首字母相同的字母,那么我从这个位置(注意每次对照时要保存地址,后续比对完全相同时要将地址返回)开始对照两个字符串的字母,若str1中有一段字母与str2完全相同,就返回保存的地址。当遍历完整个字符串后,仍然没有返回一个地址,证明str2不是str1的字串,返回NULL。

程序代码:

#include <stdio.h>
char * my_strstr(char *str_1, char *str_2)
{
    char *s = NULL;//用于记录第一次查找到的位置
    char *str2 = str_2;
    while(*str_1)//遍历字符串str1
    {
        s = str_1;//记录可能返回的地址
        str_2 = str2;//重置指针指向字符串str_2的首地址
        if(*str_1 == *str_2)//第一个字符匹配时判断剩余字符是否匹配
        {
            while(*++str_2)
            {
                ++str_1;
                if(*str_1 != *str_2)
                {
                    break;
                }
            }
            if(*str_2 == '\0')
                return s;
        }
        str_1 = s+1;
    }
    return NULL;
}
int main(int argc, char *argv[])
{ 
    int i;
    char str_1[50];
    char str_2[50];
    puts("请输入一个字符串str_1:");
    gets(str_1);
    puts("请输入要查找的字符串str_2:");
    gets(str_2);
    char * ret = my_strstr(str_1,str_2);//接收返回值
    if(ret == NULL)//未查找到
    {
        puts("字符串str_2不是字符串str_1的子串");
    }
    else
        printf("字符串str_2是字符串str_1的子串,首次出现的地址为%p\n",ret);
    printf("下面为字符串str_1各个字符地址表,方便对照\n");
    for(i = 0; str_1[i] != '\0'; i++)
    {
        printf("%c-----%p\n",str_1[i],str_1+i);
    }

}

运行结果:

请输入一个字符串str_1:
hello world
请输入要查找的字符串str_2:
orl
字符串str_2是字符串str_1的子串,首次出现的地址为0x7ffe42b60e47
下面为字符串str_1各个字符地址表,方便对照
h-----0x7ffe42b60e40
e-----0x7ffe42b60e41
l-----0x7ffe42b60e42
l-----0x7ffe42b60e43
o-----0x7ffe42b60e44
 -----0x7ffe42b60e45
w-----0x7ffe42b60e46
o-----0x7ffe42b60e47
r-----0x7ffe42b60e48
l-----0x7ffe42b60e49
d-----0x7ffe42b60e4a
请输入一个字符串str_1:
hello world
请输入要查找的字符串str_2:
nihao 
字符串str_2不是字符串str_1的子串
下面为字符串str_1各个字符地址表,方便对照
h-----0x7ffe09a620b0
e-----0x7ffe09a620b1
l-----0x7ffe09a620b2
l-----0x7ffe09a620b3
o-----0x7ffe09a620b4
 -----0x7ffe09a620b5
w-----0x7ffe09a620b6
o-----0x7ffe09a620b7
r-----0x7ffe09a620b8
l-----0x7ffe09a620b9
d-----0x7ffe09a620ba

标签:一个,char,地址,查找,-----,str,字符串
From: https://blog.csdn.net/a921876874/article/details/143244358

相关文章

  • 1.散列查找
    目录散列查找一、散列表1.1Hashtable(HT)1.2哈希算法的基本工作1.3时间复杂度1.4散列(Hashing)基本思想1.5装填因子(LoadingFactor):1.6查找成功平均查找长度ASL(success)【2018统考真题】1.7查找失败的平均查找长度ASL(failure)【2019统考真题】【2023统考真题】......
  • 一个可以调节笔记本亮度的程序
    在我这台笔记本上,当我把显示模式调为读显时发现右下角的亮度不能调了,就像这样 听说时nvidia显卡不适配的问题咱也不知道呀于是我就用java写了程序来调节,用了俩个多月,没啥问题的打开就是这样拉动直接就可以调节源码importjavax.swing.*;importjavax.swing.event.Cha......
  • 基于令牌桶算法实现一个限流器
    序言:本文章基于令牌桶算法实现了简单的一个限流器1令牌桶算法实现原理令牌生成:在固定的时间间隔内,算法会向一个桶中放入一定数量的令牌。令牌的生成速率是固定的,通常以每秒钟生成的令牌数来表示。桶的容量:桶有一个最大容量,如果桶满了,新的令牌将被丢弃。这意味着即使在......
  • IDEA如何将一个分支的代码合并到另一个分支(当前分支)
    前言我们在使用IDEA开发Java应用时,经常是和git一起使用的。我们对于git常用的操作包括提交,推送,拉取代码等。还有一个重要的功能是合并代码。那么,我们应该如何合并代码呢?如何合并代码首先,我们选择当前的代码分支,点击一下。然后,我们点击下需要合并过来的分支,在二级菜单里面,点......
  • JavaScript CSS Vue3 实现一个简单的Loading
    之前项目用到的,后来换其他效果了。放博客里保存一下。效果视频转GIF之后不太流畅……代码<scriptsetuplang="ts">import{onBeforeUnmount,onMounted,ref}from"vue";import{clamp}from"../scripts/Utils";constmaskDiv=ref<HTMLDivElement>(null)co......
  • 2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQu
    2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组wordsContainer和wordsQuery,要对每个wordsQuery[i]找到一个与其有最长公共后缀的字符串。如果有多个字符串与wordsQuery[i]有相同的最长公共后缀,则返回在wordsContainer中最早出现的那个。最后,返回一个整数数组a......
  • Vue3取当前时间和一个小时后的时间。
    constformatDate=(date)=>{//初始化时间   //格式化日期为YYYY-MM-DDHH:mm:ss   constyear=date.getFullYear();   constmonth=String(date.getMonth()+1).padStart(2,'0');//月份从0开始   constday=String(date.getDate())......
  • Vue3中取当前日期并且取当前日期的前10天和后30天。并把每个日期的日放到一个数组里面
    consttoday=newDate();//获取当前日期constdateArray=[];constdayArray=[];//计算前10天for(leti=10;i>0;i--){constpastDate=newDate(today);pastDate.setDate(today.getDate()-i);dateArray.push(......
  • 66.《ds---查找》
    one查找概念线性结构大纲总体上就是一个基本概念和五种查找方法查找表分为静态查找表和动态查找表-静态查找表只涉及查找操作(顺序查找折半查找散列查找)-动态查找表动态插入或删除(二叉排序树查找散列查找)对于关键概念关键字和平均查找长度(假设总左往右一一查询......
  • 2024网络安全现状,一个(黑客)真实的收入
    一个黑客年薪是多少呢?外界普遍认为黑客是高收入群体,那么你想过黑客是怎么赚钱的吗?黑客分为白帽黑客和黑帽黑客,处于黑白两道的黑客会的技术都有些相似,但是却是对立的,白帽做网络安全,修补漏洞。黑帽各种破坏,挖数据,攻击漏洞。===白帽收入稳定由于白帽黑客是正规稳定的职业,通......