程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 關於C語言函數strstr()的分析以及實現

關於C語言函數strstr()的分析以及實現

編輯:更多關於編程
    以下是對C語言中strstr()函數的使用進行了詳細的分析介紹,需要的朋友可以參考下  

    原型:char *strstr(const char *str1, const char *str2);
    #include<string.h>
    找出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 <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <stdlib.h>
    #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;
    }
    /*FROM 百科*/
    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 <iostream>
    #include <string>
    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;
    }

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved