C语言字符串库函数的实现

1.strlen(字符串的长度)

size_t Strlen(const char* str)
{
    assert(str);
    for (size_t i = 0;; ++i)
    {
        if (str[i] == ‘\0‘)
            return i;
    }
}

size_t StrlenByRecursion(const char* str)
{
    return *str == ‘\0‘ ? 0 : StrlenByRecursion(str + 1) + 1;
}
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 = 0;
    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 0;
}
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 );
}  
				
时间: 2025-01-04 19:01:02

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

C语言字符串处理库函数

http://blog.csdn.net/pipisorry/article/details/36898405 使用C语言字符串处理的库函数,务必包含头文件string.h,即#include <string.h> 1. 比较字符串大小函数   1) 忽略大小写---strcasecmp 函数原型: int strcasecmp (const char *s1, const char *s2); 函数说明: 用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异 2)忽略大小写-stric

自己动手写字符串库函数 四(C语言)

上一篇 自己动手写字符串库函数 三(C语言) //重置 void my_StrSet(string *des, const char ch) { if (!IsEmpty(des)) return; else { char* des1 = des->str; int desLen = my_StrLen(des->str); while (desLen--) *des1++ = ch; } } //插入字符串 void my_InsertStr(string*strs, const char

C语言中库函数strstr的实现

在C语言中库函数strstr()函数表示在一个字符串str1中查找另一个字符串str2,如果查到则返回str2在str1中首次出现的位置,如果找不到则返回null. char* strstr(char* str,char* s){ int n; if(*s != '\0'){ while(*str){ for(n=0;(*str+n)==(*s+n);n++){ if(!*(s+n+1) == '\0'){ return (char*) str; } } str++; } return NULL

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

转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 作者:jcsu C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. 字符串求长 - strlen5. 字符串连接 - strcat6. 字符串比较 - strcmp7. 计算字符串中的元音字符个数8. 判断一个字符串是否是回文1. 写一个函数实现字符串反转 版本1 - while版 void strRev(char *s){    

C语言字符串的操作

C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. 字符串求长 - strlen5. 字符串连接 - strcat6. 字符串比较 - strcmp7. 计算字符串中的元音字符个数8. 判断一个字符串是否是回文1. 写一个函数实现字符串反转 版本1 - while版 void strRev(char *s){    char temp, *end = s + strlen(s) - 1;    while( end 

C语言字符串操作大全

转载自:C语言字符串操作总结大全(超详细) 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串strncmp(p, p1, n) 比较指定长度字符串 strchr(p, c) 在字符串中查找指定字符 strrchr(p, c)

C语言字符串函数大全

转载自http://www.360doc.com/content/08/0723/22/26860_1462024.shtml# 函数名: stpcpy 功能: 拷贝一个字符串到另一个 用法: char *stpcpy(char *destin, char *source); 程序例: #include<stdio.h> #include<string.h> int main(void) { char string[10]; char *str1 = "abcdefghi

C语言——字符串长度的计算方法

C语言——字符串长度的计算方法 提示:(1)计算字符串长度时关键是要注意辨认转义字符:(2)一个转义字符总是以反斜杠开始,再加一个其他字符组成.所以,遇到反斜杠时要特别注意!!! 1.不带转义字符的字符串   如:“abc!x=/”,其长度为 7   2.带转义字符的字符串   (1) 字符串“abc\n”:其中的'\n'为转义字符(换行符),计算字符串长度时只能计作一个字符,所以该字符串的长度为4(而不是5)   (2) 字符串“abc\n\\\'\"":其中有4个转义字符:'\n'

C语言 字符串和数字转换函数

atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include <stdlib.h> 定义函数 double atof(const char *nptr); 函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回.参数nptr字符串可包含正负号.小数点或E(e)来表示指数部分,如123.456或123e-2.