栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

关于C语言函数strstr()的分析以及实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于C语言函数strstr()的分析以及实现

原型:char *strstr(const char *str1, const char *str2);
#include
找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。返回该位置的指针,如找不到,返回空指针。
Returns a pointer to the first occurrence of strSearch in str, or NULL if strSearch does not appear in str. IfstrSearch points to a string of zero length, the function returns str.
复制代码 代码如下:
#include
#include
#include
#include
#pragma warning (disable:4996)
char *mystrstr(char *s1,char *s2);
int main(void)
{
 char *s="Golden Global View";
 char *l="ob";   //char *l=""
 char *p;
 system("cls");
 p=mystrstr(s,l);
 if (p!=NULL)
 {
  printf("%sn",p);
 }
 else
 {
  printf("Not Found!n");
 }
    getch();
 return 0;
}

char *mystrstr(char *s1,char *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;
 }
}

另一个实现:
复制代码 代码如下:
char *  strstr (buf, sub)
     register char *buf;
     register char *sub;
{
    register char *bp;
    register char *sp;
    if (!*sub)
      return buf;
    while (*buf)
    {
        bp = buf;
        sp = sub;
        do {
            if (!*sp)
              return buf;
        } while (*bp++ == *sp++);
        buf += 1;
    }
    return 0;
}

又一个实现:
复制代码 代码如下:
#include
#include
using namespace std;
//c语言实现strstr
const char* isSub(const char* str, const char *subs){
 //特殊情况
 if(!*subs)
  return str;
 const char* tmp=str;
 while (*tmp!='')
 {
  //用于每次将父串向后移动一个字符
  const char* tmp1=tmp;
  //记录子串地址
  const char* sub1=subs;
  while (*sub1!=''&&*tmp1!='')
  {
   //若不相等则跳出,将父串后移一个字符
   if (*sub1!=*tmp1)
    break;
   //若相等且子串下一个字符是末尾则是这个父串的子串
   if (*sub1==*tmp1&&*(sub1+1)=='')
    return tmp;
   //若相等则继续比较下一个字符
   if (*sub1==*tmp1)
   {
    sub1++;
    tmp1++;
   }
  }
  tmp++;
 }
 return NULL;
}
int main(){
 char* str1="ababcdddb";
 char* str="";
 const char *res=isSub(str1,str);
 if (res!=NULL)
 {
  cout << res << endl;
 }
 else
  cout << "null" << endl;
 //cout << isSub(str1,str) << endl;
 return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/66406.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号