常用的几个字符串函数的使用和实现

函数头文件string.h

①strlen()函数

此函数用于统计字符串的长度,不包括字符串结束字符’\0’。
如果字符个数和字符串大小相等,strlen()函数就无法返回确定值,例如:
char atr[5] = “abcde”;strlen()会一直往下检索,直到遇见’\0’,在遇到’\0’之前的区域是不确定的。

函数实现如下:

int strlen(const char *str)
{
     int count = 0;
     assert(str != NULL);

     while(*str++ != '\0')
     {
          count++;
     }

     return count;
}

②strcpy()函数

用于拷贝字符串。

函数实现如下:

char * strcpy(char * dst, const char * src)
{
        char * cp = dst;

        while( *cp++ = *src++ )
                ;               /* Copy src over dst */

        return( dst );
}

将src指向的字符串拷贝至dst指向的数组中,返回dst的值即一个字符的地址。
此函数还有一个有用的属性:第1个参数不必指向数组的开始,可以实现拷贝数据的一部分。
例如:

int main()
{
    char str2[20] = "boy";
    char str1[20] = "hello world";

    strcpy(str1 + 6,str2);

    puts(str1);
    return 0;
}

该程序的输出为:hello boy

③strcmp()函数

用于字符串的比较。

函数实现如下:

int strcmp (const char * src,const char * dst)
{
        int ret = 0 ;

        while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
                ++src, ++dst;

        if ( ret < 0 )
                ret = -1 ;
        else if ( ret > 0 )
                ret = 1 ;

        return( ret );
}

如果两个字符串相同,函数返回0。如果前者大于后者,返回大于0的值。前者小于后者,则返回小于0的值。

④strcat()函数

用于拼接字符串。

函数实现如下:

char * strcat (char * dst,const char * src)
{
    char * cp = dst;

     while( *cp )
            cp++;                   /* find end of dst */

     while( *cp++ = *src++ ) ;       /* Copy src to end of dst */

     return( dst );                  /* return dst */
}

函数接受两个字符串为参数,把第2个字符串的备份附加在第1个字符串的末尾,并把拼接形成的新字符串作为第1个字符串。
strcat()函数的类型是char * 。即返回拼接完成后第1个字符串的地址。

⑤strstr()函数

函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。

函数实现如下:

char * strstr (const char * str1,const char * str2)
{
        char *cp = (char *) str1;
        char *s1, *s2;

        if ( !*str2 )
            return((char *)str1);

        while (*cp)
        {
                s1 = cp;
                s2 = (char *) str2;

                while ( *s1 && *s2 && !(*s1-*s2) )
                        s1++, s2++;

                if (!*s2)
                        return(cp);

                cp++;
        }

        return(NULL);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值