1.strcpy(字符串拷贝)
strcpy(arr,str):arr是要拷贝的空间,str是要被拷贝的字符串。
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char*dest,const char*str)
{
char* ret = dest;//保存dest初始位置
assert(dest&&str);
while (*dest++ = *str++)
{
;
}
*dest = '\0';
return ret;
}
int main()
{
char arr[20] = {0};
my_strcpy(arr, "senpaolove");//arr是被拷贝的地方,“senpaolove”是被拷贝的对象。
printf("%s\n",arr);
return 0;
}
2.strcat(字符串追加)
stract(str1,str2):str1是原本的字符串,str2是要追加的字符串
#include <stdio.h>
#include <assert.h>
char* my_strcat(char*dest,const char*scr)
{
assert(dest&&scr);
char*ret = dest;
while (*dest)
{
*dest++;
}
while (*dest++ = *scr++)
{
;
}
return ret;
}
int main()
{
char arr[20] = "senpao";
my_strcat(arr, "love");//arr是原本的字符串,“love”是要追加的字符串
printf("%s\n",arr);
return 0;
}
3.strstr(字符串查找字符串)
strstr(str1,str2):str1是在这个字符串里面找,str2是要被找的字符串。
如果找到的话,返回第一次出现这个字符串的地址,如果没找到,返回空指针。
#include <stdio.h>
char* my_strstr(const char *s1, const char *s2)
{
const char* p1 = s1;
const char* p2 = s2;
const char* start = p1;
while (*start)
{
p1 = start;
while (*p1&&*p1 == *p2)
{
p1++;
p2++;
}
if (*p2 == '\0')
{
return start;
}
start++;
p2 = s2;
}
return NULL;
}
int main()
{
char arr1[20] = "senpaolove";
char arr2[10] = "paolo";
char*ret=my_strstr(arr1,arr2);
if (ret != NULL)
{
printf("%s\n", ret);
}
else
{
printf("没找到\n");
}
return 0;
}
4.strchr(字符串查找字符)
strcmp(str, char) :str是在这个字符串里面找,char为要被找的字符。
如果找到的话,返回这个字符第一次出现的地址,没找到返回空指针。
#include <stdio.h>
char* my_strchr(const char* p, char s)
{
while (*p != s )
{
*p++;
}
if (*p == s )
{
return p;
}
else
{
return NULL;
}
}
int main()
{
char arr[20] = "wangyifei1564165";
char*ret = my_strchr(arr, '5');
if (ret != NULL)
{
printf("%s\n",ret);
}
else
{
printf("找不到\n");
}
return 0;
}
5.strcmp(字符串比较)
strcmp(str1,str2):str1为第一个字符串,str2为第二个字符串
如果str1>str2,返回大于零的数;
如果str1=str2,返回0;
如果str1<str2,返回小于零的数。
#include <stdio.h>
#include <assert.h>
int my_strcmp(const char*p1, const char*p2)
{
assert(p1&&p2);
while (*p1 == *p2)
{
if (*p1 == '\0')
return 0;
*p1++;
*p2++;
}
return *p1 - *p2;
}
int main()
{
char arr1[10] = "senpaolove";
char arr2[10] = "senpaoevil";
int ret = my_strcmp(arr1, arr2);
if (ret > 0)
{
printf("大于\n");
}
else if (ret < 0)
{
printf("小于\n");
}
else
{
printf("相等\n");
}
return 0;
}
6.memcpy(内存拷贝)
memcpy(dest,src,count):dest是要拷贝到的空间,src是要被拷贝的内容,count是要拷贝的
字节数
#include <stdio.h>
#include <assert.h>
void* my_memcpy(void* dest, const void* sou, size_t count)
{
void* ret = dest;
assert(dest&&sou);
while (count--)
{
*(char*)dest = *(char*)sou;
((char*)dest)++;
((char*)sou)++;
}
return ret;
}
int main()
{
int sou[10] = {1,2,3,4,5,6};
int dest[10] = { 0 };
my_memcpy(dest, sou, 4*sizeof(int));
return 0;
}
7.memmove(拷贝那些有重叠的两个区域的内容,当没有重叠时,效果和memcpy一样)
memmove(arr1,arr1+2,count): arr1是将要被拷贝区域的内容,arr1+1是源区域(要拷贝)的内容,即将arr1+1的内容拷贝到arr1的区域去。count是要被拷贝的字节数
#include <stdio.h>
#include <assert.h>
void* my_memmove(void* dest, const void* sou, size_t count)
{
char* ret = dest;
assert(dest&&sou);
if (dest < sou)
{
while (count--)
{
*(char*)dest = *(char*)sou;
((char*)dest)++;
((char*)sou)++;
}
}
else
{
while (count--)
{
*((char*)dest + count - 1) = *((char*)sou + count - 1);
}
}
return ret;
}
int main()
{
char arr1[10] = "abcdef";
char arr2[10] = {0};
char* ret = my_memmove(arr2, arr1, 5* sizeof(char));
printf("%s\n",ret);
return 0;
}