字符串拷贝/字符串比较/字符串连接/字符串长度/字符子串/内存块复制/内存块赋值初始化库函数实现
2018-01-27 21:17
429 查看
字符串拷贝、字符串比较、字符串连接、字符串长度、字符子串、内存块复制、内存块赋值初始化
//字符串拷贝
char* strcpy(char* strDest,const char* strSrc)
{
assert(strDest!=NULL && strSrc!=NULL);
if(strDest==strSrc)
return strDest;
char *address=strDest;
while((*strDest++=*strSrc++)!='\0')
return address;
}
char* strncpy(char* strDest,const char* strSrc,unsigned int count)
{
assert(strDest!=NULL && strSrc!=NULL);
if(strDest==strSrc)
return strDest;
char *address=strDest;
while(count-- && *strSrc!='\0')
*strDest++=*strSrc++;
*strDest='\0';
return address;
}
//字符串比较
int strcmp(const char *s,const char *t)
{
assert(s!=NULL && *t!-NULL);
while(*s && *t && *s==*t)
{
++s;
++t;
}
return(*s-*t);
}
int strncmp(const char *s,const char *t,unsigned int count)
{
assert(s!=NULL && *t!-NULL);
while(*s && *t && *s==*t && count--)
{
++s;
++t;
}
return(*s-*t);
}
//字符串连接
char* strcat(char* strDest,const char* strSrc)
{
assert(strDest!=NULL && strSrc!=NULL);
if(strDest==strSrc)
return strDest;
while(strSrc!='\0')
strSrc++;
char *address=strDest;
while((*strDest++=*strSrc++)!='\0')
return address;
}
char* strncat(char* strDest, const char* strSrc,unsigned int count)
{
assert(strDest!=NULL && strSrc!=NULL);
if(strDest==strSrc)
return strDest;
char *address=strDest;
while(strSrc!='\0')
strSrc++;
while(count-- && *strSrc!='\0')
*strDest++=*strSrc++;
*strDest='\0';
return address;
}
//字符串长度
int* len(const char* str)
{
assert(str!=NULL);
int len=0;
while(*str!=NULL)
len++;
return len;
}
//字符串子串
char* strstr(const char* strSrc,const char*str)
{
assert(strSrc!=NULL && str!=NULL);
const char* s=strSrc;
const char* t=str;
for(;strSrc!='\0';strSrc++)
{
for(s=strSrc,t=str;*t!='\0'&&*s==*t;s++,t++);
if(*t=='\0')
return (char*)strSrc;
}
}
//内存块复制
void *memcpy(void *dest,const void *src, unsigned int count)
{
assert(dest!=NULL && src!=NULL);
(char*)tempdest=(char*)dest;
(char*)tempsrc=(char*)src;
while(count--)
*tempdest++=*tempsrc++;
return dest;
}
//内存块赋值初始化
//函数原型:void *memset(void *str, int c, size_t n)
//功能:以str为起始位置的n个字节的内存区域用整数c进行填充
//参数:str为内存区域的起始位置,c为要填充的字符,n为要填充多少个字节
//返回值:目标str内存的起始地址
void *memset(void *str, int c, unsigned int count)
{
assert(str!=NULL );
(char*)tempsrc=src;
while(count--)
*tempsrc++=c;
return str;
}
//字符串拷贝
char* strcpy(char* strDest,const char* strSrc)
{
assert(strDest!=NULL && strSrc!=NULL);
if(strDest==strSrc)
return strDest;
char *address=strDest;
while((*strDest++=*strSrc++)!='\0')
return address;
}
char* strncpy(char* strDest,const char* strSrc,unsigned int count)
{
assert(strDest!=NULL && strSrc!=NULL);
if(strDest==strSrc)
return strDest;
char *address=strDest;
while(count-- && *strSrc!='\0')
*strDest++=*strSrc++;
*strDest='\0';
return address;
}
//字符串比较
int strcmp(const char *s,const char *t)
{
assert(s!=NULL && *t!-NULL);
while(*s && *t && *s==*t)
{
++s;
++t;
}
return(*s-*t);
}
int strncmp(const char *s,const char *t,unsigned int count)
{
assert(s!=NULL && *t!-NULL);
while(*s && *t && *s==*t && count--)
{
++s;
++t;
}
return(*s-*t);
}
//字符串连接
char* strcat(char* strDest,const char* strSrc)
{
assert(strDest!=NULL && strSrc!=NULL);
if(strDest==strSrc)
return strDest;
while(strSrc!='\0')
strSrc++;
char *address=strDest;
while((*strDest++=*strSrc++)!='\0')
return address;
}
char* strncat(char* strDest, const char* strSrc,unsigned int count)
{
assert(strDest!=NULL && strSrc!=NULL);
if(strDest==strSrc)
return strDest;
char *address=strDest;
while(strSrc!='\0')
strSrc++;
while(count-- && *strSrc!='\0')
*strDest++=*strSrc++;
*strDest='\0';
return address;
}
//字符串长度
int* len(const char* str)
{
assert(str!=NULL);
int len=0;
while(*str!=NULL)
len++;
return len;
}
//字符串子串
char* strstr(const char* strSrc,const char*str)
{
assert(strSrc!=NULL && str!=NULL);
const char* s=strSrc;
const char* t=str;
for(;strSrc!='\0';strSrc++)
{
for(s=strSrc,t=str;*t!='\0'&&*s==*t;s++,t++);
if(*t=='\0')
return (char*)strSrc;
}
}
//内存块复制
void *memcpy(void *dest,const void *src, unsigned int count)
{
assert(dest!=NULL && src!=NULL);
(char*)tempdest=(char*)dest;
(char*)tempsrc=(char*)src;
while(count--)
*tempdest++=*tempsrc++;
return dest;
}
//内存块赋值初始化
//函数原型:void *memset(void *str, int c, size_t n)
//功能:以str为起始位置的n个字节的内存区域用整数c进行填充
//参数:str为内存区域的起始位置,c为要填充的字符,n为要填充多少个字节
//返回值:目标str内存的起始地址
void *memset(void *str, int c, unsigned int count)
{
assert(str!=NULL );
(char*)tempsrc=src;
while(count--)
*tempsrc++=c;
return str;
}
相关文章推荐
- 不使用库函数实现字符串的复制、连接、比较、反转、计算长度及易混淆点等
- 字符串的一些基本操作,复制,长度,子串查找,单词反转,比较,字符串反转,删除指定字符。
- 用字符指针作函数参数来实现字符串的复制
- 《面向对象程序设计与VC++实现》--liwei_2_1(字符串基本操作 求长度、复制、连接)
- 字符串处理函数的功能的实现(字符串连接,字符串复制)
- C 语言 实现 字符串 分割 函数(返回"二维字符数组",及分割后的字符数组的长度)
- JS编写一个函数,实现传入一个不定长度字符串,查找出重复次数前n名的字符并分别统计其次数
- 请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。
- String类简单实现(构造、拷贝构造、析构、赋值、输出、比较、字符串加、长度、子串)
- 如果字符串的一个子串(其长度大于 1)的各个字符均相同,则称之为等值子串。试设计一算法,求出串S中的最大等值子串 函数返回最大等值子串的长度,如果没有则返回1。 例如: 若S= “abc123abc1
- C 语言 实现 字符串 分割 函数(返回"二维字符数组",及分割后的字符数组的长度)
- 字符串的连接、复制、求长度、比较函数。
- 请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能
- 6-2-1 字符串-字符串变量String-创建字符串变量-初始化字符串变量-字符串连接-输入字符串(单词、行)-对象变量的赋值-比较两个字符串是否同一个-比较两个字符串内容是否相同
- 字符数组函数,连接strcat 复制函数strcpy 比较函数strcmp 长度函数 strlen
- 自己实现的字符串长度求取、复制、连接
- 请编写实现malloc()内存分配函数功能一样的代码。给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。
- 编写一个函数,实现两个字符串的连接功能
- 递归问题之一:给定一字符串,输出字符串中所有字符子串的各种组合形式,长度为一个字符到字符串的长度,忽略排序
- 在英文字符串中找第一个最长不含重复字符的子串高效实现(修改版)