码迷,mamicode.com
首页 > 其他好文 > 详细

strcpy、strcat、strstr的实现

时间:2019-04-03 20:42:30      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:参考   add   ref   sig   strcat   turn   ++   生成   har   

参考:www.cnblogs.com/carsonzhu/p/5277036.html

字符串拷贝函数strcpy的原型:

char *strcpy(char *strDest,const char *strSrc);

strcpy函数将strSrc拷贝至输出参数strDest中,同时函数的返回值又是strDest。这样做并非多此一举,可以获得如下灵活性:

    char str[20];

    int length = strlen( strcpy(str, “Hello World”) );

作用:为了生成链式表达式。

在面试中常会遇到写 strcpy,以及相关的问题,比如说返回值的作用等。

char * strcpy( char *strDest, const char *strSrc )
{
 assert( (strDest != NULL) && (strSrc != NULL) );
 char *address = strDest;
 while( (*strDest++ = * strSrc++) != ‘\0‘ );
 return address;
}

char * strcpy(char* dst,const char* src)
{
    assert((dst!=NULL)&&(src!=NULL));
    char* cp=dst;
    while(*src!=‘\0‘)
    {
        *dst=*src;
        src++;
        dst++;
    }
    *dst=‘\0‘;
    return cp;
}
 
char* strcat ( char * dst , const char * src )
{
    char * cp = dst;
    while( *cp )
        cp++;                       /* find end of dst */
    while(*src!=‘\0‘)
    {
        *cp++=*src++;
    }
    *cp=‘\0‘;
    return dst;                  /* return dst */
}  
 
int strcmp(const char* str1, const char* str2)
{
    int ret = 0;
    while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1)
    {
        str1++;
        str2++
    }
    if (ret < 0)
    {
        return -1;
    }
    else if (ret > 0)
    {
        return 1;
    }
    return 0;
}
 
char *strstr( const char *s1, const char *s2 )
{
    int len2;
    if ( !(len2 = strlen(s2)) )
        return (char *)s1;
    for ( ; *s1; ++s1 )
    {
        if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 )
            return (char *)s1;
    }
    return NULL;
}

  要注意内存重叠时的问题。

strcat:将两个char类型连接

char d[20]="GoldenGlobal"; char *s="View"; strcat(d,s);
结果放在d中
printf("%s",d);
输出 d 为 GoldenGlobalView (中间无空格)
d和s所指内存区域不可以重叠且d必须有足够的空间来容纳s的字符串。
返回指向d的指针

strcmp:比较两个字符串str1和str2

若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。

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

strcpy、strcat、strstr的实现

标签:参考   add   ref   sig   strcat   turn   ++   生成   har   

原文地址:https://www.cnblogs.com/htj10/p/10651258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!