strstr函数c语言源码_c++strstr函数的用法

hacker|
93

文章目录:

C语言实现库函数strstr()

char *str_s(char *s1,char *s2)

{

    int len,i,flag=0;

    char *s3=NULL;

    len=strlen(s2);

    

        while(*s1!='\0')

        {

            if(*s1==*s2)

            {

                s3=s1;

                for(i=0;ilen;i++)

                {

                    if(*(s1+i)!=*(s2+i))

                    {

                        s3=NULL;

                        break;

                    }

                    else

                        flag=1;

                }

            }

            s1++;

            if(flagi == len)//注意这里的判断

                return s2;//返回的话,最好是返回s2 否则你如果字符串在中间的话,后面的数据是不需要的。

        }

        

        return s3;

    

}

C语言函数strstr的函数原型extern char *strstr(char *str1, char *str2);

extern 定义在前面

extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义

extern "C"的作用是,告诉C++编译器,下面的代码按照C的方式进行编译

我不是不懂extern修饰符的含义,我是问,为什么函数原型前面加一个extern修饰符?

不是很清楚吗 有这个表示 是说明 他在别的文件 里面有定义 编译器 要知道 你在别的文件中定义 使用 但是要在别的文件里面使用它 不告诉编译器 他知道 嘛 你知道不管用

C语言strstr()函数

思路:

从第一个字符串的第一位开始查找符合第二个字符串第一位的数据,如果找到,设定开始位置(记下来)

则循环判断是否符合下一位的数据,如果出现不符合,则回到原记录位置,重新查找符合第二个字符串的第一个位置的数据,如果找到,则。。。。循环前面一步的操作

如果完全符合,即第二个字符串遍历结束,则返回记录的位置

如此,你分析一下就可以得到一个嵌套循环的查找了

求C语言中怎么用strstr函数求!位置!

strstr()函数是标准C语言函数,在linux系统下,运行命令man strstr 可以看到strstr()函数原型为:

$ man strstr

SYNOPSIS

        #include string.h

        char *strstr(const char *haystack, const char *needle);

DESCRIPTION

       The strstr() function finds the first occurrence of the substring needle in the string haystack.  The terminating '\0' characters are not compared.

函数功能描述: strstr()函数查找needle(第二个参数)在字符串haystack(第一个参数)中首次出现的位置。如果找到,则返回子串首位置的指针值,否则返回NULL。

如果想将指针位置转换成相应的字符偏移位置,可以用返回指针与字符串haystack指针进行相减运算,得到偏移值。参考代码和运行结果如下:

c语言的查找字符串函数strstr效率高吗?源码有谁知道的

/*解决一般长度的可以。。因为使用了朴素的字符串匹配算法,所以效率不算高,KMP算法更好一些。

以下是源码:*/

/*strstr function*/

#includestring.h

char *(strstr)(const char *s1, const char *s2)

{ /* find first occurrence of s2[] in s1[] */

if (*s2 == '\0')

return ((char*)s1);

for (; (s1 = strchr(s1, *s2)) != NULL; ++s1){/*match rest of prefix*/

const char *sc1, *sc2;

for (sc1 = s1, sc2 = s2;;)

if (*++sc2 == '\0')

return ((char *)s1);

else if (*++sc1 != *sc2)

break;

}

return (NULL);

}

/*strchr function*/

#includestring.h

char *(strchr)(const char *s, int c)

{ /* find first occurrence of c in char s[] */

const char ch = c;

for (; *s != ch; ++s)

if (*s == '\0')

return (NULL);

return ((char*) s);

}

C语言中,strstr函数的功能是什么?不用库函数,自己写怎么写?

C语言中,strstr函数的功能是寻找字符串中子串出现的位置,自己写的步骤如下。

需要准备的材料分别有:电脑、C语言编译器。

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

2、在test.cpp文件中,输入C语言代码:。

int fun(char *a, char *b)

{

int i, j, alen = strlen(a), blen = strlen(b);

for (i = 0; i alen - blen + 1; i++)

if (a[i] == b[0]) {

for (j = 1; j blen; j++) if (a[i + j] != b[j])break;

if (j == blen)

return i;

}

return -1;

}

3、编译器运行test.cpp文件,此时成功实现了strstr实现了字符串查找。

5条大神的评论

  • avatar
    访客 2022-07-05 上午 10:43:25

    char *sc1, *sc2; for (sc1 = s1, sc2 = s2;;) if (*++sc2 == '\0') return ((char *)s1); else if (*++sc1 != *sc2) break; } retur

  • avatar
    访客 2022-07-05 上午 09:17:20

    s3=NULL;    len=strlen(s2);            while(*s1!='\0')        {            if(*s1==*s2) 

  • avatar
    访客 2022-07-05 上午 04:55:11

    ar*)s1); for (; (s1 = strchr(s1, *s2)) != NULL; ++s1){/*match rest of prefix*/ const char *sc1, *sc2; for (sc1 = s1, sc2

  • avatar
    访客 2022-07-05 上午 11:16:37

    -1;}3、编译器运行test.cpp文件,此时成功实现了strstr实现了字符串查找。

  • avatar
    访客 2022-07-05 上午 04:34:31

    a), blen = strlen(b);for (i = 0; i alen - blen + 1; i++)if (a[i] == b[0]) {for (j = 1; j blen; j++) if (a[i + j] != b[j])break;i

发表评论