size_t Strlen(const char * s)//统计有效长度
{
if('\0' == *s)
{
return 0;
}
else
{
return Strlen(s+1) + 1;
}
}
char *Strcpy(char *dest,const char *src)//字符串复制
{
char *ret = dest;
while(*src)
{
*dest++ = *src++;
}
*dest = '\0';
return ret;
}
char * Strncp(char *dest,const char * src,size_t n)//复制前n个字符
{
char * ret = dest;
while(n && *src)
{
*dest++ = *src++;
--n;
}
*dest = '\0';
return ret;
}
char * Strcat(char *dest,const char *src)//字符串拼接
{
char *ret = dest;
while(*dest)
{
++dest;
}
while(*src)
{
*dest++ = *src++;
}
*dest = '\0';
return ret;
}
//将src前n个字符拼接到dest上
char *Strncat(char *dest,const char * src,size_t n)
{
char * ret = dest;
while(*dest)
{
++dest;
}
while(n && *src)
{
*dest++ = *src++;
--n;
}
*dest = '\0';
return ret;
}
//字符串比较
int Strcmp(const char * s1,const char * s2)
{
while(*s1 == *s2 && *s1 &&*s2)
{
++s1;
++s2;
}
return *s1 - *s2;
}
//比较字符串前n个字符
#include <assert.h>
int Strncmp(const char * s1,const char *s2,size_t n)
{
assert(n != 0);//断言
while(--n && *s1 == *s2 && *s1 && *s2)
{
++s1;
++s2;
}
return *s1 - *s2;
}
//寻找sub在dest中首次出现的位置
#include <string.h>
int Strstr(const char * dest,const char *sub)
{
int i;
for(i = 0;i < strlen(dest);++i)
{
if(0 == strncmp(dest + i,sub,strlen(sub)))
{
return i;
}
}
return -1;
}
strtok函数(分割字符串)
**char *strtok(char s, const char delim);
在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回被分割出片段的指针。