1.strlen(字符串的长度)

size_t Strlen(const char* str)
{
assert(str);
for (size_t i = ;; ++i)
{
if (str[i] == '\0')
return i;
}
} size_t StrlenByRecursion(const char* str)
{
return *str == '\0' ? : StrlenByRecursion(str + ) + ;
}
size_t __cdecl strlen (const char * str)  //函数库里面实现的代码
{
const char *eos = str; while( *eos++ ) ; return( (int)(eos - str - 1) );
}
 

2.strcpy(字符串拷贝)

char* Strcpy1(char* dst, const char* src)
{
assert(dst && src);
int i = ;
for (; src[i] != '\0'; ++i)
{
dst[i] = src[i];
}
dst[i] = '\0';
return dst;
} char* Strcpy2(char* dst, const char* src)
{
assert(dst && src);
char* tmp = dst;
while ((*tmp++ = *src++) != '\0');
*tmp = '\0';
return dst;
} char *  strcpy (char * dest,const char* src)   //函数库中的实现

    reg_char c; 
    char *__unbounded s = (char *__unbounded) CHECK_BOUNDS_LOW (src); 
    const ptrdiff_t off = CHECK_BOUNDS_LOW (dest) - s - 1; 
    size_t n; 
     
    do 
    { 
        c = *s++; 
        s[off] = c; 
    } 
    while (c != '\0'); 
     
    n = s - src; 
    (void) CHECK_BOUNDS_HIGH (src + n); 
    (void) CHECK_BOUNDS_HIGH (dest + n); 
     
    return dest; 
}

3.strncpy

char* Strncpy(char* dst,const char* src,int lenth)
{
assert(dst && src);
char* tmp = dst;
while (lenth--)
{
if ((*tmp++ = *src) != '\0')
src++;
}
*tmp = '\0';
return dst;
}
char * __cdecl strncpy (char * dest,const char * source,size_t count)
{
char *start = dest; while (count && (*dest++ = *source++)) /* copy string */
count--; if (count) /* pad out with zeroes */
while (--count)
*dest++ = '\0'; return(start);
}
 

4.strcat(字符串连接)

char* Strcat(char* dst, const char* src)
{
assert(dst && src);
char* tmp = dst;
while (*tmp)
tmp++;
while ((*tmp++ = *src++) != '\0');
return dst;
}
char * __cdecl 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 */
}
 

5.strncat

char* Strncat(char* dst,const char* src,size_t lenth)
{
assert(dst && src);
char* tmp = dst;
while (*tmp)
++tmp;
while (lenth-- && (*tmp++ = *src++));
*tmp = '\0';
return dst;
}
char * __cdecl strncat (char * front,const char * back,size_t count)     //库中实现的方法
{
char *start = front; while (*front++)
;
front--; while (count--)
if (!(*front++ = *back++))
return(start); *front = '\0';
return(start);
}
 

6.strcmp

int Strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2 && *str2)
{
str1++;
str2++;
}
return *(unsigned char*)str1 - *(unsigend char*)str2;
}
int __cdecl 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 );
}
 

7.strncmp

int Strncmp(const char* str1, const char* str2,size_t lenth)
{
assert(str1 && str2);
while (lenth-- && *str2)
{
if (*str1 != *str2)
return *(unsigned char*)str1 - *(unsigned char*)str2;
str1++;
str2++;
}
return ;
}
int __cdecl strncmp (const char * first,const char * last,size_t count)     //库里实现的方式
{
if (!count)
return(0); while (--count && *first && *first == *last)
{
first++;
last++;
} return( *(unsigned char *)first - *(unsigned char *)last );
}

C语言字符串库函数的实现的更多相关文章

  1. 5. 常见C语言字符串库函数的使用及实现

    1. strncat 函数: [函数原型]#include <string.h> char *strncat( char *str1, const char *str2, size_t c ...

  2. c语言字符串库函数#include<string.h>

    字符串函数<string.h> 在头文件<string.h>中定义了两组字符串函数.第一组函数的名字以str开头:第二组函数的名字以mem开头.只有函数memmove对重叠对象 ...

  3. C语言字符串操作常用库函数

    C语言字符串操作常用库函数 *********************************************************************************** 函数 ...

  4. C语言讲义——字符串库函数

    字符串库函数<string.h> 求字符串长度(不含结束符'\0'****) strlen(str) 字符串赋值(可能造成数组越界) strcpy(str," 水浒传 " ...

  5. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  6. C 语言字符串连接的 3种方式

    C 语言字符串连接的 3种方式 #include<stdio.h> #include<stdlib.h> #include<string.h> char *join ...

  7. C.【转】C语言字符串与数字相互转换

    1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...

  8. C语言中库函数strstr的实现

    在C语言中库函数strstr()函数表示在一个字符串str1中查找另一个字符串str2,如果查到则返回str2在str1中首次出现的位置,如果找不到则返回null. char* strstr(char ...

  9. C语言字符串的操作

    C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. 字符串求长 - strlen5. 字符串连接 - strcat6. ...

随机推荐

  1. 从PowerDesigner概念设计模型(CDM)中的3种实体关系说起

    转:http://www.cnblogs.com/xingyukun/archive/2007/08/02/840293.html CDM是大多数开发者使用PD时最先创建的模型,也是整个数据库设计最高 ...

  2. 出现 HTTP Error 503. The service is unavailable 错误

    今天修改一些配置后重启了IIS,兴高采烈的按下了回车.duang一下,HTTP Error 503. The service is unavailable,蹦出这行字,网站挂了. 没动别的竟然这样了. ...

  3. .net code injection

    .NET Internals and Code Injection http://www.ntcore.com/files/netint_injection.htm Windows Hooks in ...

  4. Delphi 对象的创建(create)与释放(free/destory)

    Delphi 对象的创建(create)与释放(free/destory) 1.Create参数为:nil/self/application的区别,最好能看到实际效果的区别 例如: My := TMy ...

  5. java如何遍历hashMap

    通过Map的entrySet方法.将返回一个set集合.然后遍历这个set集合: package com.howlaa.day04; import java.util.HashMap; import ...

  6. chrome浏览器打开网页,总是跳转到2345主页的解决方法 2345.com 绑架主页

    昨晚装了一个wifi共享精灵,原本以为这下好了,全宿舍都可以上网了,但是,确实噩梦的开始啊. 遇到问题:不小心在安装wifi共享精灵的时候,点到了设置2345.com为主页,后来,每次使用chrome ...

  7. Redis Error

    1,MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. C ...

  8. android 01

    安卓开源(就是免费),谷歌收购后推出,可以山寨(小米,三星都是安卓的山寨),ios不是开源(苹果应用要商用就要交钱).安卓3.0是平板,现在安卓至少是4.0以上,否则out了. 微软主要是系统和off ...

  9. hadoop处理Excel通话记录

    前面我们所写mr程序的输入都是文本文件,但真正工作中我们难免会碰到需要处理其它格式的情况,下面以处理excel数据为例 1.项目需求 有刘超与家庭成员之间的通话记录一份,存储在Excel文件中,如下面 ...

  10. Not enough free space on disks! linux

    Not enough free space on disks!100多G未分配空间也装不了Linux ------------------------------------------------- ...