前言
c语言中对字符和字符串的处理十分频繁,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中。字符串常量适用于那些不对他进行修改的字符串函数。
一、求字符串长度
strlen
字符串以\0作为结束标志,strlen函数返回的是在字符串中‘\0’前面出现的字符个数
my_strlen模拟实现strlen函数
代码如下:
int my_strlen(const char* str)//模拟strlen
{
assert(str);
if (*str=='\0')
{
return 0;
}
return my_strlen(str + 1) + 1;//不为斜杠0则返回1+下一个地址
}
二、长度不受限制的字符串函数
strcpy
char* strcpy(char* destination,const char * source)
将源字符串中的‘\0’之前的字符连带‘\0’拷贝到目标空间
my_strcpy模拟实现strcpy函数
代码如下:
char* my_strcpy(char* dest, const char* str)//模拟实现strcpy
{
assert(dest);
assert(str);
char* ret = dest;
while (*dest++ = *str++);
return ret;
}
strcat
char* strcat (char* destination, const char* source)
将source连带‘\0’追加到destination的‘\0’后面(将覆盖‘\0’)
my_strcat模拟实现strcat函数
代码如下:
char* my_strcat(char* dest, const char* str)
{
assert(dest);
assert(str);
char* ret = dest;
while (*dest)
{
dest++;
}//找到dest的斜杠0
while (*dest++ = *str++);//追加
return ret;
}
strcmp
int strcmp(const char* str1,const char* str2)
第一个不相等的字符的ASCLL值进行比较
my_strcmp模拟实现函数strcmp
代码如下:
int my_strcmp(const char* str1, const char* str2)
{
assert(str1&&str2);
while (*str1!='\0' && *str2!='\0')
{
if (*str1 == *str2)
{
str1++;
str2++;
}
else
{
return *str1 - *str2;
}
}
return 0;
//默认abc与abcde相等
}
三、字符串查找
strstr
char* strstr(const char* string,const char*strCharSet);
查找字符串
my_strstr模拟实现strstr函数
代码如下:
char* ny_strstr(const char* p1,const char* p2)
{
assert(p1);
assert(p2);
char* s1=NULL;
char* s2=NULL;
char* cur=(char*)p1;
if(!*p2)
{
return (char*)p1;
}
while(*cur)
{
s1=cur;
s2=(char*)p2;
while((*s1=*s2)&&(*s1)&&(*s2))
{
s1++;
s2++;
}
if(!*s2)
{
return cur;
}
cur++;
}
return NULL;
}
stroke
char* stroke(charstr ,const char sep)
sep参数是个字符串,定义了用作分隔符的字符集合