C语言字符串库函数的实现
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语言字符串库函数的实现的更多相关文章
- 5. 常见C语言字符串库函数的使用及实现
1. strncat 函数: [函数原型]#include <string.h> char *strncat( char *str1, const char *str2, size_t c ...
- c语言字符串库函数#include<string.h>
字符串函数<string.h> 在头文件<string.h>中定义了两组字符串函数.第一组函数的名字以str开头:第二组函数的名字以mem开头.只有函数memmove对重叠对象 ...
- C语言字符串操作常用库函数
C语言字符串操作常用库函数 *********************************************************************************** 函数 ...
- C语言讲义——字符串库函数
字符串库函数<string.h> 求字符串长度(不含结束符'\0'****) strlen(str) 字符串赋值(可能造成数组越界) strcpy(str," 水浒传 " ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- C 语言字符串连接的 3种方式
C 语言字符串连接的 3种方式 #include<stdio.h> #include<stdlib.h> #include<string.h> char *join ...
- C.【转】C语言字符串与数字相互转换
1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...
- C语言中库函数strstr的实现
在C语言中库函数strstr()函数表示在一个字符串str1中查找另一个字符串str2,如果查到则返回str2在str1中首次出现的位置,如果找不到则返回null. char* strstr(char ...
- C语言字符串的操作
C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. 字符串求长 - strlen5. 字符串连接 - strcat6. ...
随机推荐
- bzoj2743
其实和bzoj1878类似只不过要求的是区间内数量多于1个的数字种数其实还是按照bzoj1878做只不过我们是把每一种数字下一个出现的位置+1,并把这个位置置为0 ..] of longint; ma ...
- page.Response.WriteFile(newpath);
page.Response.Clear(); page.Response.ClearHeaders(); page.Response.Buffer = fa ...
- android日历控件(一)
自定义日历并且具备设置今天以前的时间不可点选,以前的颜色和当前的颜色不同,以及获取两次点击日期之间间隔的天数所以说细节比较多 个人习惯,先上图 靠,笔记本不知道怎么回事,禁用到触摸板之后 再次唤醒屏幕 ...
- JavaScript高级程序设计13.pdf
使用hasOwnProperty()方法检测一个属性存在实例还是原形中,当属性存在对象实例中时,返回true alert(person1.hasOwnProperty("name" ...
- poj 3465 Corn Fields 状态压缩
题目链接:http://poj.org/problem?id=3254 #include <cstdio> #include <cstring> #include <io ...
- 一个很cool的C#的高性能数学库
High Performance Math Library for C# and .NET是一个很cool的C#的高性能数学库,3D效果也很不错,下图是首页上的一个例子.他也有一个交互的网页,你可以自 ...
- Bash简单介绍
Bash不不过一个命令解析程序. 它本身拥有一种程序设计语言,使用这样的语言,能够编写shell脚本来完毕各种各样的工作.而这些工作是使用现成的命令所无法完毕的.Bash脚本能够使用if-then-e ...
- uva 11440 - Help Tomisu(欧拉功能)
题目链接:uva 11440 - Help Tomisu 题目大意:给定n和m,求从2~n.中的数x.要求x的质因子均大于m.问说x有多少个.答案模上1e9+7. 解题思路: (1)n!=k∗m!(n ...
- cocos2dx实现android的对讯飞语音的合成(语言朗读的实现)
事实上非常easy,只是有些细节须要注意. 关于讯飞语音在android上的应用,大家须要自己去下载SDK,然后依照讯飞语音提供的api在自己的android的Demo上执行成功,那东西也相当的简单. ...
- myeclipse一些技巧
ctrl+h-----------------查找字符串 ctrl+A 全选→ctrl+shift+f 代码格式化,排版 ctrl+shift+O 自动引用