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

来源:互联网 发布:大连知行中学升学率 编辑:程序博客网 时间:2024/04/30 08:32

函数头文件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