strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。

C语言函数

包含文件:string.h
函数名: strstr
函数原型:
1
extern char *strstr(char *str1, const char *str2);
语法:
1
strstr(str1,str2)
str1: 被查找目标 string expression to search.
str2: 要查找对象 The string expression to find.
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
例子:
1
2
3
char str[]="1234xyz";
char *str1=strstr(str,"34");
cout << str1 << endl;

显示的是: 34xyz

函数实现

1.Copyright 1990 Software Development Systems, Inc.
1
2
3
4
5
6
7
8
9
10
11
12
char *strstr(const char *s1,const char *s2)
{
 int len2;
 if(!(len2=strlen(s2)))//此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误
     return(char*)s1;
 for(;*s1;++s1)
 {
     if(*s1==*s2 && strncmp(s1,s2,len2)==0)
     return(char*)s1;
 }
 return NULL;
}

2.Copyright 1986 - 1999 IAR Systems. All rights reserved
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
char *strstr(constchar*s1,constchar*s2)
{
    int n;
    if(*s2)
    {
        while(*s1)
        {
            for(n=0;*(s1+n)==*(s2+n);n++)
            {
                if(!*(s2+n+1))
                    return(char*)s1;
            }
            s1++;
        }
        return NULL;
    }
    else
        return (char*)s1;
}

3. GCC-4.8.0
1
2
3
4
5
6
7
8
9
10
11
char *strstr(const char*s1,const char*s2)
{
    const char*p=s1;
    const size_tlen=strlen(s2);
    for(;(p=strchr(p,*s2))!=0;p++)
    {
        if(strncmp(p,s2,len)==0)
            return (char*)p;
    }
    return(0);
}


  

应用举例

// strstr.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <syslib.h>
#include <string.h>
main()
{
    char *s="GoldenGlobalView";
    char *l="lob";
    char *p;
    clrscr();
    p=strstr(s,l);
    if(p)
        printf("%s",p);
    else
        printf("NotFound!");
    getchar();
    return0;
}

//功能:从字串” string1 onexxx string2 oneyyy”中寻找”yyy”
(假设xxx和yyy都是一个未知的字串)
1
2
3
4
5
6
7
char *s=”string1onexxxstring2oneyyy”;
char *p;
p=strstr(s,”yyy”);
if(p!=NULL)
    printf(“%s”,p);
else
    printf("notfound\n");

说明:如果直接写语句p=strstr(s,”one”),找到的是onexxxstring2oneyyy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
char *mystrstr(char*s1,char*s2)
{
    if(*s1==0)
    {
        if(*s2)
            return (char*)NULL;
        return (char*)s1;
    }
    while(*s1)
    {
        int i=0;
        while(1)
        {
            if(s2[i]==0)
                return s1;
            if(s2[i]!=s1[i])
                break;
            i++;
        }
        s1++;
    }
    return (char*)NULL;
}

C语言strstr函数相关推荐

  1. C语言 strstr函数的用法及模拟实现strstr函数

    C语言 strstr函数的用法及模拟实现strstr函数 一.strstr函数的用法 二.模拟实现strstr函数的功能 一.strstr函数的用法 1.strstr函数原型:char* strstr ...

  2. C语言strstr()函数使用注意事项

    最近在写一段C语言代码时用到了strstr()函数,遇到了一个意想不到的问题,记录一下. 这个函数接收两个参数,strstr(str1,str2)函数具体功能是检测str2是否为str1的子集,如果是 ...

  3. C语言strstr()函数(在主字符串里查找子字符串,返回第一次找到的子字符串以及后面的字符串)

    需包含头文件:C 标准库 - <string.h> 文章目录 描述 声明 参数 返回值 实例 描述 C 库函数 char *strstr(const char *haystack, con ...

  4. C语言strstr函数实现

    自己实现C语言中的strstr函数,采用字符一个一个进行匹配,如果不等,则从下一个位置进行匹配. /* strstr 实现 */ char* mystrstr(const char* dest, co ...

  5. C语言strstr()函数用法-字符串查找

    1.函数定义 strstr()函数是一个参数为两个字符指针类型,返回值是char*类型的函数. 用于找到子串(str2)在一个字符串(str1)中第一次出现的位置(不包括str2的串结束符),并返回该 ...

  6. C语言 strstr()函数介绍

    前言 C语言中,strstr()函数用于找到子串在一个字符串中第一次出现的位置,在string.h头文件中. 例如:char *strstr(const char *str1, const char ...

  7. strstr函数实现(C语言)

    strstr函数实现(C语言) second60  20180601 strstr 用来字符串查找子串. 顺便说一下, 字符串操作函数是C语言中非常重要的函数,里面包括了指针的精华,同时对学习数据结构 ...

  8. C语言字符串函数(3)strstr,strtok函数的详解

    上一期,我讲解了关于字符串函数中,受限制的字符串函数,有想了解的小伙伴们可以点此链接去看看:C语言字符串函数(2)受限制的字符串函数 那么今天,我来讲一讲标题中这两个函数的作用和使用方法. 目录 一. ...

  9. strstr函数头文件_C语言(函数)学习之strstr strcasestr

    一.strstr函数使用 [1] 函数原型 char *strstr(const char *haystack, const char *needle); [2] 头文件 #include [3] 函 ...

最新文章

  1. 单片机彩灯移动实验_用S7-1200 PLC实现循环彩灯的控制,含源程序
  2. R语言ggplot2可视化按照因子排序(order of facets)可视化分组多子图(facet、面图)实战
  3. iphone修改html样式,html – iphone在输入上覆盖我的所有样式[type =“submit”]
  4. centos mysql 端口_Linux CentOS Mysql修改默认端口
  5. excel三次样条函数_日常系列2:二次和三次函数样条、数据的插值
  6. Java死锁故障排除和解决
  7. 【LeetCode笔记】剑指Offer 37. 序列化二叉树(Java、二叉树、序列化、BFS、队列)
  8. java 安卓调试_【转】Android 调试技术
  9. 想当年,我也是斩获20+大厂offer的收割机!
  10. diff算法_[VUE学习]徒手撸一个虚拟dom+diff算法
  11. vue.3.0 dom赋值_Vue 3.0 快速入门
  12. sd-card on android 5.0,Android5.0以上SDCard文件删除问题
  13. php类最大多少行合适,计算最大包大小(PHP)
  14. Git 分支 - 分支的新建
  15. JAVA 经纬度转换成直角坐标系,以及直角坐标系转换成经纬度算法
  16. 京东、阿里:健康版图再博弈
  17. office产品密钥如何找回
  18. matlab 通过矩阵变换使图像旋转平移_28. 图像扭曲
  19. 计算机word保存如何操作,如何保存WORD文档内容???急
  20. HTTP浏览器输入URL后发生了什么

热门文章

  1. djang urls.py 无名有名分组,反向解析,路由分发,名称空间,伪静态,虚拟环境,django版本...
  2. 【迷人的爪哇】——抽象类和接口
  3. WebBrowser中打开新页面
  4. 我的Java学习之路(七)-- 模拟考试系统
  5. 计算机求等级值的计算,2015年计算机一级MS OFFICE等级考试计算题
  6. 中国银联-银星计划面试经历
  7. 屏幕分辨率、像素相关概念拾遗
  8. 【UE4学习】04——官方教程代码
  9. 2018年保研夏令营之华东理工大学计算机
  10. Cryptohack刷题记录(一) General部分 WP