包含以下函数: //字符串查找将在下篇文章详细说明

size_t lm_strlen(const char *str);
size_t lm_strlen2(const char *str);
char * lm_strcpy(char *dest, const char *src);
char * lm_strncpy(char *dest, const char *src, size_t n);
char * lm_strncpy2(char *dest, const char *src, size_t n);
char * lm_strcat (char *dest, const char *src);
char * lm_strcat2 (char *dest, const char *src);
char * lm_strncat (char *dest, const char *src, size_t n);
char * lm_strncat2 (char *dest, const char *src, size_t n);
int lm_strcmp(const char *s1, const char *s2);
int lm_strncmp(const char *s1, const char *s2, size_t n);

//注:有些函数名字后面有2的表示第二钟方法
size_t lm_strlen(const char *str){
 int len;
 for(len = 0; '/0' != *str++; )
  ++len;
 return len;
}

size_t lm_strlen2(const char *str){
 const char *psz = str;
 while(*psz++)
  ;
 return (psz-str-1);
}

/* 从src复制源字符串到dest,包括结束符'/0',如果dest数组容量不够,继续覆盖dest数组后面的内存

*/
char * lm_strcpy(char *dest, const char *src){
  //if( (!dest)||(!src) ) return NULL;  //通常为了保持高效不加判断
  char *save = dest;
  while(*dest++ = *src++)
   ;
  return save;
}

char * lm_strncpy(char *dest, const char *src, size_t n){
  char *start = dest;
  char *end = dest + n;

while ((start < end) && (*start++ = *src++))
    ;

return (dest);
}

char * lm_strncpy2(char *dest, const char *src, size_t n){
  if (n > 0) {
    char *d = dest;
    const char *s = src;

do {
      if ((*d++ = *s++) == 0){
        //如果n大于字符串src的长度,dest多余部分清0
       while (--n != 0)
         *d++ = 0;
       break;
      }
    } while (--n != 0);
  }
  return dest;
}

char * lm_strcat (char *dest, const char *src){
  //if( (!dest ) return NULL;
  //if( !src ) return dest;
  lm_strcpy (dest + lm_strlen (dest), src);
  return dest;
}

char * lm_strcat2 (char *dest, const char *src){
    char *save;
    //if( (!dest ) return NULL;
    //if( !src ) return dest;
    for(save = dest; *dest; dest++ )
  ;

for( ; (*dest = *src); dest++, src++ )
  ;
    return save;
}

char * lm_strncat (char *dest, const char *src, size_t n){
  //if( (!dest ) return NULL;
  //if( !src ) return dest;
  lm_strncpy (dest + lm_strlen (dest), src, n);
  return dest;
}

char * lm_strncat2 (char *dest, const char *src, size_t n){
    char *save;
    //if( (!dest ) return NULL;
    //if( !src ) return dest;
    for(save = dest; *dest; dest++ )
  ;

for( ; (n>0)&&(*dest = *src); dest++, src++, n--)
  ;
    return save;
}

int lm_strcmp(const char *s1, const char *s2){
  while (*s1 != '/0' && *s1 == *s2) {
 s1++;
 s2++;
  }
  return(*s1 - *s2);
}

int lm_strncmp(const char *s1, const char *s2, size_t n){
  while (n-- > 0 && *s1 != '/0' && *s1 == *s2){
    s1++;
   s2++;
  }
  return(*s1 - *s2);
}

转载于:https://www.cnblogs.com/secbook/archive/2008/10/08/2655459.html

字符串处理函数C语言实现(一)相关推荐

  1. 一个字符串截取函数c语言

    刚开始学习c语言,标准库中总是有很多函数没有,string.h中的字符串处理函数好像不是很多,在做栈的例子用需要用到一个字符串按位置截取的函数,就自己写一个,超简单. char* substring( ...

  2. c语言字符串atoi函数,C语言实现atoi函数

    atoi函数:把字符串转换为数字(int型) int atoi_my(char *str) { int flag = 1; int number = 0; //判断是否为空 if(str == NUL ...

  3. 自定义字符串查找函数c语言,(C语言自定义函数,/*编写函数实现在字符串pStr中查找子串pSub int subString( char* pStr, char* pSub);...

    求高手指点哪里有错!!!!十万火急急!!!!! #include #include int subString( char* pStr, char* pSub); char* sucString( c ...

  4. 字符串处理函数C语言

    1.大写转换为小写字符串: void Upper2Lower(unsigned char *code,unsigned char *code1) { uint16 src_len = 0; uint1 ...

  5. c语言'字符串截取函数,C语言中的字符串截取函数及应用

    /*======================================================== 对于一个五位数a1a2a3a4a5,可将其拆分为三个子数: sub1=a1a2a3 ...

  6. C语言基础知识(三)-程序设计结构、数组、字符串处理函数

    本文是C语言的基础知识,主要讲解三种程序设计结构.数组.字符串和字符数组.数组元素查询以及字符串处理函数. 程序结构设计 包括C语言在内的几乎任何编程语言都支持以下三种程序设计结构,它们分别是: 顺序 ...

  7. c语言计算字符串的函数是什么,字符函数

    字符函数(character function)是处理字符型数据的函数,其自变量或函数值中至少有一个是字符型数据. 中文名 字符函数 外文名 character function 应用领域 计算机等涉 ...

  8. c语言英文字符转数字,C语言常用数字和字符串转换函数(国外英文资料).doc

    C语言常用数字和字符串转换函数(国外英文资料) C语言常用数字和字符串转换函数(国外英文资料) C language commonly used Numbers and string conversi ...

  9. perm函数c语言_理解C语言(三) 字符串处理函数

    1 字符串基础 字符串是一种重要的数据类型,有零个或多个字符组成的有限串行. 定义子串: 串中任意个连续的字符组成的子序列,并规定空串是任意串的子串,任意串也是其自身的子串,如字符串"ade ...

最新文章

  1. 用法 stl_51Nod 2160 数字游戏 STL基本用法
  2. 报表 表格间距_从易读性和易操作性两大方面,教你做好表格设计
  3. python array笔记
  4. ASP.NET MVC 2
  5. 将mysql的数据库导入到linux_linux 操作之一 如何在linux将本地数据*.sql文件导入到linux 云服务器上的mysql数据库...
  6. EventFlow.helper.js 事件流程控制
  7. 进程间关系和守护进程
  8. 首层nginx 传递 二级代理,三级代理......多级代理nginx 客户端真实IP的方法
  9. python中直方图bins是什么意思_Python 中下划线的 5 种含义都是什么?
  10. 自动化测试元素查找利器firepath介绍
  11. 成为一名PHP专家其实并不难
  12. VS2008安装deffactory.dat文件错误解决方法
  13. Tomcat基础教程(三)
  14. LeetCode:Anagrams
  15. js foreach用法_36 个JS 面试题为你助力金九银十(面试必读)
  16. 集成海康威视Sadp SDK实现重置密码
  17. MTK 6589暗码切换开机LOGO(不适应NAND 的FLASH)
  18. 今年很火的 AI 绘画怎么玩
  19. java毕业生设计在线辅导答疑系统计算机源码+系统+mysql+调试部署+lw
  20. jmeter设置为中文的两种方法

热门文章

  1. SFB 项目经验-12-为某上市企业的Skype for Business购买Godday证书
  2. Java移位运算之算术右移位
  3. MyCAT-1.4-RC性能测试(初步施工)
  4. 挖一挖不常用到而又很实用的重载-Trim
  5. SharePoint 沙盒解决方案 VS 场解决方案
  6. 不要担心,我可以一个人走
  7. 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证
  8. Trailblazer —— Rails 的扩展概念驱动开发框架
  9. Bzoj2555 SubString
  10. 7 虚拟磁盘恢复虚拟机