1.主要的字符串处理函数:
(1)strlen(s)返回s的长度,不包括字符串结束符null。
int strlen(const char *str){
assert(str!=NULL);
int len=0;
while((*str++)!='\0')
len++;
return len;
}
(2)strcmp(s1,s2):比较两个字符串s1和s2是否相同。若s1与s2相等,返回0;若s1大于s2,返回正数;若s1小于s2,则返回负数。
例子:判断字符串a和b是否相等,应当使用if(strcmp(a,b))。if(a==b)比较的是首地址而不是内容。
(3)strcat(s1,s2):将字符串s2连接到s1后,并返回s1。
(4)strcpy(s1,s2):将s2复制给s1,并返回s2。
(5)strncat(s1,s2,n):将s2的前n个字符连接到s1后面,并返回s1。
(6)strncpy(s1,s2,n):将s2的前n个字符复制给s1,并返回s1。
例子:字符串包含问题。如主串A="ababcabcacbab",要你在A中查找子串(模式串)B=“abcac"。
解答:使用最基本的算法(BF算法),时间复杂度为O((m-n+1)*n)代码如下:
char *strFind(const char *string, const char *substring){
assert(string!=NULL&substring!=NULl);
int m=strlen(string);
int n=strlen(substring);
if(m<n)
return NULL:
for(int i=0;i<=m-n;i++){
for(int j=0;j<n;j++){
if(string([i+j]!=substring[j])
break;
}
if(j==n)
return string+i;
}
return NULL;
方法二是使用KMP算法,此时的复杂度为O(m+n)