acm常用字符串处理函数

  • 格式:doc
  • 大小:40.50 KB
  • 文档页数:11

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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()