strcat();
函数原型:char* strcat(char* dest, const char* src)
函数原型:int strcmp(const char* str1,const char* str2)
功 能: 两个字符串比较
str1 < str2 返回负数
str1 == str2 返回0
str1 > str2 返回正数
函数原型:char* strcpy(char* dest,const char* src);
功能为拷贝字符串内容到目的串,把src所指向的内容拷贝到dest
当sizeof(dest)>=sizeof(src)时,拷贝正确,并在dest字符串后面加入'\0';
当sizeof(dest)<sizeof(src)时,拷贝出错
函数原型:char *strncpy(char *dest,char *src,size_t n);
功能:将src 的前n个字符,赋值到dest中。
注意: 当n>=sizeof(src)时,拷贝正确,并在dest字符串后面加入'\0';
当n<sizeof(src)时,只拷贝src前n - 1个字符串到dest,不会为dest字符串后面加入'\0';
函数原型:unsigned strlen(const char *str);
功能:功能为返回字符串str的长度(不包括'\0')。
strlen() 有好几种实现方法;
第一种 使用计数器法
函数原型:char *strchr(char *str, char c)
功能:查找str中首次出现c的位置,如有,则返回出现位置,否则返回NULL。
函数原型:char *strrchr(char *str, char c)
功能:查找str中最后一次出现的位置,如果有,则返回出现位置,否则返回NULL;
原型:char *strrev(char *str)
功能:为反转字符串,返回字符串指针。
原型:char *strstr(const char str1, const char *str2)
功能:查找字符串str2在str1中出现的位置,找到则返回位置,否则返回NULL。
函数原型:char* strcat(char* dest, const char* src)
功 能: 将src 的 字符串追加到 dest后边
char* Strcat(char* dest, const char* src)
{
if (NULL == src)
{
return dest;
}
char* add = dest;
while (*add)
{
add++;
}
while (*src)
{
*add = *src;
add++;
src++;
}
*add = '\0';
return dest;
}
strcmp() 函数原型:int strcmp(const char* str1,const char* str2)
功 能: 两个字符串比较
str1 < str2 返回负数
str1 == str2 返回0
str1 > str2 返回正数
int Strcmp(const char* str1,const char* str2)
{
const char* pstr1 = str1;
const char* pstr2 = str2;
while (*pstr1 == *pstr2)
{
if (*pstr1 == 0) //这里一定要先判断 *pstr1 是否是 '\0' 如果是'\0',说明两个字符串都到了结尾
{
return 0;
}
pstr1++;
pstr2++;
}
//到这里两种情况,第一种:一个字符串是 ‘\0’ ,一个是字符,
// 第二种:两个都是字符
return (*pstr1 - *pstr2);
}
strcpy() 函数原型:char* strcpy(char* dest,const char* src);
功能为拷贝字符串内容到目的串,把src所指向的内容拷贝到dest
当sizeof(dest)>=sizeof(src)时,拷贝正确,并在dest字符串后面加入'\0';
当sizeof(dest)<sizeof(src)时,拷贝出错
char* Strcpy(char* dest, const char* src)
{
if (NULL == src )
{
return NULL;
}
char* addr = dest;
//最简洁的方法
//while (*dest++ = *src++);
//稍微复杂点
while (*src)
{
*dest = *src;
*dest++;
*src++;
}
*dest = '\0'*/ //注意:这块在后边要加 ‘\0’;
return addr;
}
strncpy() //注意:如果dest中本身有字符串,那么复制的n个字符串只会覆盖前面的n个字符,dest本身后边的字符还在 函数原型:char *strncpy(char *dest,char *src,size_t n);
功能:将src 的前n个字符,赋值到dest中。
注意: 当n>=sizeof(src)时,拷贝正确,并在dest字符串后面加入'\0';
当n<sizeof(src)时,只拷贝src前n - 1个字符串到dest,不会为dest字符串后面加入'\0';
char* Strncpy(char* dest, const char* src,size_t n)
{
assert(dest && src);
char* add = dest; //先记录头指针,作为返回值
//复杂法
/*while (n && *src)
{
*dest = *src;
dest++;
src++;
n--;
}
if (*src == '0')
{
*dest = '\0';
}
while (n--)
{
*dest = '\0';
}*/
//优化法
while (n && (*dest++ = *src++)) //这样可以把 src 的 '\0' 复制进去
{
n--;
}
while (n--)
{
*dest++ = '\0';
}
return add;
}
strlen() 函数原型:unsigned strlen(const char *str);
功能:功能为返回字符串str的长度(不包括'\0')。
strlen() 有好几种实现方法;
第一种 使用计数器法
unsigned Strlen_1(const char* str)
{
unsigned count = 0;
while (*str)
{
str++;
count++;
}
return count;
}
第二种 指针相减法unsigned Strlen_2(const char* str)
{
const char* begin = str;
while (*str)
{
str++;
}
return str - begin;
}
第三种:使用递归 这种方法很容易理解,但是函数递归调用费时间unsigned Strlen_3(const char* str)
{
if (*str == '\0')
{
return 0;
}
else
{
return 1 + Strlen_3(str+1);
}
}
strchr(); 函数原型:char *strchr(char *str, char c)
功能:查找str中首次出现c的位置,如有,则返回出现位置,否则返回NULL。
char* Strchr(char* str, char c)
{
if (NULL == str)
{
return NULL;
}
while (*str != c)
{
if (*str == '\0')
{
return NULL;
}
str++;
}
return str;
}
strrchr() 函数原型:char *strrchr(char *str, char c)
功能:查找str中最后一次出现的位置,如果有,则返回出现位置,否则返回NULL;
char* Strrchar(char* str, char c)
{
//普通法,从前向后查找,使用一个指针记录出现字符的位置,知道最后一个
//缺点:需要遍历以便字符串,速度慢
/*char* add = NULL;
while (*str)
{
if (*str == c)
{
add = str;
}
str++;
}
if (NULL == add)
{
return NULL;
}
else
{
return add;
}*/
//优化法 从字符串的最后一个结点向前遍历,
//优点:一般情况下,速度效率高一些
size_t len = strlen(str);
char* Radd = str + len - 1; //字符串最后一个结点的地址 记得要 -1
while (*Radd != c && Radd != str) // 不减一也行,Radd指的就是字符串的 ‘\0’位置
{
Radd--;
}
if (*Radd == c)
{
return Radd;
}
return NULL;
}
strrev() 原型:char *strrev(char *str)
功能:为反转字符串,返回字符串指针。
char* Strrev(char* str)
{
if (NULL == str)
{
return NULL;
}
char* start = str;
char* end = str + strlen(str) - 1;
while (start < end)
{
char tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
return str;
}
strstr() //查找子串 原型:char *strstr(const char str1, const char *str2)
功能:查找字符串str2在str1中出现的位置,找到则返回位置,否则返回NULL。
const char* Strstr(const char* str1, const char* str2)
{
//方法一:一个一个字符来比较,具体的操作需要自己来实现
/*if (NULL == str1 || NULL == str2)
{
return NULL;
}
while (*str1)
{
if (*str1 == *str2)
{
const char* ret = str1;
const char* tmp_str1 = str1;
const char* tmp_str2 = str2;
while (*tmp_str2)
{
if (*tmp_str1 != *tmp_str2)
{
break;
}
tmp_str1++;
tmp_str2++;
}
if (*tmp_str2 == '\0')
{
return ret;
}
}
str1++;
}
return NULL;*/
//方法二:使用库函数 strncmp()函数
if (NULL == str1 || NULL == str2)
{
return NULL;
}
unsigned len1 = strlen(str1);
unsigned len2 = strlen(str2);
while (len1 >= len2)
{
if (strncmp(str1, str2, len2) == 0)
{
return str1;
}
len1--;
str1++;
}
return NULL;
}
以上的都是自己总结的,有什么不足的地方,各位兄弟姐妹烦请指正,感谢! 版权声明:本文为weiaiyisheng_ljj原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。