文章目录:
- 1、C语言实现库函数strstr()
- 2、C语言函数strstr的函数原型extern char *strstr(char *str1, char *str2);
- 3、C语言strstr()函数
- 4、求C语言中怎么用strstr函数求!位置!
- 5、c语言的查找字符串函数strstr效率高吗?源码有谁知道的
- 6、C语言中,strstr函数的功能是什么?不用库函数,自己写怎么写?
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实现了字符串查找。
char *sc1, *sc2; for (sc1 = s1, sc2 = s2;;) if (*++sc2 == '\0') return ((char *)s1); else if (*++sc1 != *sc2) break; } retur
s3=NULL; len=strlen(s2); while(*s1!='\0') { if(*s1==*s2)
ar*)s1); for (; (s1 = strchr(s1, *s2)) != NULL; ++s1){/*match rest of prefix*/ const char *sc1, *sc2; for (sc1 = s1, sc2
-1;}3、编译器运行test.cpp文件,此时成功实现了strstr实现了字符串查找。
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