2024年3月26日发(作者:)
sstrstr与strchar用法
原型:extern char *strstr(char *haystack, char *needle);
用法:#include
功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。
说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。
举例:
#include
#include
main()
{
char *s="Golden Global View";
char *l="lob";
char *p;
clrscr();
p=strstr(s,l);
if(p)
printf("%s",p);
else
printf("Not Found!");
getchar();
return 0;
}
语法:int strstr(str1,str2)
str1: 被查找目标 string expression to search.
str2:要查找对象 The string expression to find.
该函数返回str2第一次在str1中的位置,如果没有找到,返回NULL
The strstr() function returns the ordinal position within str1 of the first
occurrence of str2. If str2 is not found in str1, strstr() returns 0.
例子:
功能:从字串” string1 onexxx string2 oneyyy”中寻找”yyy”
(假设xxx和yyy都是一个未知的字串)
char *s=” string1 onexxx string2 oneyyy”;
char *p;
p=strstr(s,”string2”);
if(!p) printf(“Not Found!”);
p=strstr(p,”one”);
if(!p) printf(“Not Found!”);
p+=strlen(“one”)
printf(“%s”,p);
说明:如果直接写语句p=strstr(p,”one”),则找到的是xxx,不符合要求
所以需采用二次查找法找到目标
用法:#include
原型: extern char *strchr(char* str1, char c)
返回 c在str1中首次出现的位置的指针,若没有找到,返回NULL
#include
#include
main()
{
char*s="Golden Global View" ;
char*p ;
p=strchr(s,'l');
if(p)
printf("%s",p);
else
printf("Not Found!");
return 0 ;
}
ACM 字符串KMP算法模板与用途
直s接用KMP算法真的去匹配两个字符串其实很少见,除非字符串里的字符集范
围很小,或字符重复数量过多,用KMP可大减少时间,否则一般都是直接朴素匹
配。
kmp算法在ACM中并不大可能用来直接用,主要有用的是对它的理解和它的精华
部分----求 next [ ] 数组,这个的一个用途就是确定重复子串,具体参见
pku2406,pku1961,pku2752,(其实三个题目是一路的。。。)
下面即为求next的模板
// KMP算法计算next[]数组值
// s为传入的字符串(既为字符串,当然必须有结束符null)
//next[]为算出好的的next值,next的长度至少应为 strlen(s)+1,也就是说最
后一个null标志也是有一个值的
//算法复杂度 O(m),其中 m=strlen(s);
//并没有用严《数据结构》中的终极优化,因为我认为那个优化对ACM并不实用,
所以计算出来的next值是书上倒数第二个算法的值
void getNext(char s[],int next[])
{
int length=strlen(s);
int i=0,j=-1;s
next[0]=-1;
while(i { if(j==-1||s[i]==s[j])


发布评论