- 字符串长度
库函数strlen的原型如下:
size_t strlen(char const *string);
#include<stddef.h>
size_t strlen(char const *string)
{
int length;
while(*string++)
length++;
return length;
}
字符串复制
库函数strcpy的原型如下:
char *strcpy(char *dst, char const *src);库函数strncpy的原型如下:
char *strncpy(char *dst, char const *src, size_t len);
//警告:
//1.函数不对参数是否为NULL做检查。
//2.请确保目标数组长度足够。
//3.src、dst在内存中出现重叠,结果未定义。
char *strcpy(char *dst, char const *src)
{
char *p = dst;
while(*dst++ = *src++)
;
return p;
}
//警告:
//1.函数不对参数是否为NULL做检查。
//2.参数len不要传递负数。
//3.请确保目标数组长度足够。
//4.src、dst在内存中出现重叠,结果未定义。
char *strncpy(char *dst, char const *src, size_t len)
{
char *p = dst;
while(*src && n-- > 0)
*dst++ = *src++;
while(len-- != 0)
*s++ = '\0';
return p;
}
字符串连接
库函数strcat的原型如下:
char *strcat(char *dst, char const *src);库函数strncat的原型如下:
char *strncat(char *dst, char const *src, size_t len);
//警告:
//1.函数不对参数是否为NULL做检查。
//2.请确保目标数组长度足够。
//3.src、dst在内存中出现重叠,结果未定义。
char *strcat(char *dst, char const *src)
{
char *p = dst;
while(*dst)
dst++;
while(*dst++ = *src++)
;
return p;
}
//警告:
//1.函数不对参数是否为NULL做检查。
//2.参数len不要传负数。
//3.请确保目标数组长度足够。
//4.src、dst在内存中出现重叠,结果未定义。
char *strncat(char *dst, char const *src, size_t len)
{
char *p = dst;
while(*dst)
dst++;
while(*src && n-- > 0)
*dst++ = *src++;
*s = '\0';
return p;
}
字符串比较
库函数strcmp原型如下:
int strcmp(char const *s1, char const *s2);库函数strncmp原型如下:
int strncmp(char const *s1, char const *s2, size_t len);
//警告:
//1.函数不对参数是否为NULL做检查。
int strcmp(char const *s1, char const *s2)
{
for(; *s1 == *s2; s1++, s2++)
{
if(*s1 == '\0')
return 0;
}
return *s1 - *s2;
}
//警告:
//1.函数不对参数是否为NULL做检查。
//2.参数len不要传负数。
int strncmp(char const *s1, char const *s2, size_t len)
{
for(; *s1 == *s2; s1++, s2++)
{
if(*s1 == '\0' || --n == 0)
return 0;
}
return *s1 - *s2;
}
- 查找一个字符
库函数strchr原型如下:
char *strchr(char const *str, int ch);
//警告:
//1.函数不对参数是否为NULL做检查。
char *strchr(char const *str, int ch)
{
for(; *str != '\0'; str++)
{
if(*str == ch)
return str;
}
return NULL;
}
- 查找任何几个字符串
库函数strpbrk原型如下:
char *strpbrk(char const *str, char const *grop);
//警告:
//1.函数不对参数是否为NULL做检查。
char *strpbrk(char const *str, char const *grop)
{
char const *p = NULL;
for(; *str != '\0'; str++)
{
for(p = grop; *p != '\0'; p++)
{
if(*p == *str)
return str;
}
}
return NULL;
}
- 查找一个子串
库函数strstr原型:
char *strstr(char const *s1, char const *s2);
//警告:
//1.函数不对参数是否为NULL做检查。
char *strstr(char const *s1, char const *s2)
{
char const *p1, *p2;
for(p1 = s1; *s1 != '\0'; s++)
{
for(p1 = s1, p2 = s2; *p2 != '\0' && *p1 == *p2; p1++, p2++)
;
if(*p2 == '\0' && p2 > s2)
return s1;
}
return NULL;
}