现在的位置: 首页 > 综合 > 正文

字符串函数汇总

2014年01月02日 ⁄ 综合 ⁄ 共 1671字 ⁄ 字号 评论关闭

面试中常常会要求写一些基本的库函数,尤其以字符串库函数考的最多,所以本文汇总了一些常见的字符串库函数的实现。此外,把与内存相关的操作函数也汇总到了一起。

Cpp代码  收藏代码
  1. //求字符串长度  
  2. int strlen(const char *s) {  
  3.     int n = 0;  
  4.     while (*s++ != '\0')  
  5.         n++;  
  6.     return n;  
  7. }  
  8.   
  9. //字符串拷贝,返回指针是为了实现链式操作,如strlen(strcpy(dst, src)),dst需要保证有足够空间  
  10. char *strcpy(char *dst, const char *src) {  
  11.     assert(dst != NULL && src != NULL); //拷贝空串无意义  
  12.     char *ret = dst;  
  13.     while ((*dst++ = *src++) != '\0')  
  14.         ;  
  15.     return ret;  
  16. }  
  17.   
  18. //字符串比较,p>q则返回整数,p=q返回0,否则返回负数  
  19. int strcmp(const char *p, const char *q) {  
  20.     while (*p && *p == *q)  
  21.         p++, q++;  
  22.     return (int) ((unsigned char) *p - (unsigned char) *q);  
  23. }  
  24.   
  25. // 找到字符c在字符串s中首次出现的位置  
  26. char *strchr(const char *s, char c) {  
  27.     for (; *s; s++)  
  28.         if (*s == c)  
  29.             return (char *) s;  
  30.     return NULL;  
  31. }  
  32.   
  33. //拼接字符串,注意这里dst需要保证有足够的空间  
  34. char *strcat(char *dst, const char *src) {  
  35.     char *d = dst;  
  36.     while (*d)  
  37.         d++;  
  38.     while ((*d = *src) != '\0')  
  39.         ;  
  40.     return dst;  
  41. }  
Cpp代码  收藏代码
  1. //设置内存位置v开始的n个元素值为c  
  2. void *memset(void *v, int c, size_t n) {  
  3.     char *p = v;  
  4.     int m = n;  
  5.   
  6.     while (--m >= 0) {  
  7.         *p++ = c;  
  8.     }  
  9.     return v;  
  10. }  
  11.   
  12. //内存拷贝,注意这里不考虑内存覆盖的情况  
  13. void *memcpy(void *dst, const void *src, size_t n) {  
  14.     char *d = dst;  
  15.     const char *s = src;  
  16.     while (n--)  
  17.         *d++ = *s++;  
  18.     return dst;  
  19. }  
  20.   
  21. //内存拷贝函数更健壮的版本,可以处理内存覆盖的情况  
  22. void *memmove(void *dst, const void *src, int n) {  
  23.     char *d = dst;  
  24.     const char *s = src;  
  25.     if (s + n > d) {  
  26.         s += n;  
  27.         d += n;  
  28.          while (--n >= 0)  
  29.              *--d = *--s;  
  30.     } else {  
  31.         while (--n >= 0)  
  32.             *d++ = *s++;  
  33.     }  
  34.     return dst;  
  35. }  

抱歉!评论已关闭.