acm常用字符串处理函数
- 格式:doc
- 大小:40.50 KB
- 文档页数:11
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]) ++i; ++j; next[i]=j; } else j=next[j]; } } AC代码示例 pku 2406 #include #include char data[1000010]; int next[1000010]; // 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; next[0]=-1; while(i { if(j==-1||s[i]==s[j]) { ++i; ++j; next[i]=j; } else j=next[j]; } } inst main()