字符串

本文介绍了常用的字符串处理函数,如strlen、strcmp、strcat等,并通过示例解释了这些函数的应用场景。此外,还探讨了如何在主串中查找子串的方法,包括基本的BF算法和更高效的KMP算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值