1.Strcpy
strcpy是把含有’\0’结束符的字符串拷贝到另一个地址空间,返回值的类型为char*
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
char* Strcpy(char* des, const char* src)
{
assert(src != NULL);
int i = 0;
for (i = 0; src[i] != '\0'; ++i)
{
des[i] = src[i];
}
des[i] = '\0';
return des;
}
int main()
{
char des[]="";//给成空字符串
char src[] = "lwcunwang";
printf("%s",Strcpy(des, src));
system("pause");
return 0;
}
2.Strcat
拼接字符串
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
char* Strcat(char* des, const char* src)
{
assert(des!=NULL&&src != NULL);
int i = 0;
for (i = 0; des[i] != '\0'; ++i);//注意此时for只是找到目标字符串的最有一个元素的位置
for (int j = 0; src[j] != '\0'; ++j, ++i)
{
des[i] = src[j];
}
des[i] = '\0';
return des;
}
int main()
{
char des[]="henniubi";
char src[] = "cunwang";
printf("%s",Strcat(des, src));//输出结果henniubicunwang
system("pause");
return 0;
}
3.Strstr
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。
例如:str1=lwcun wang; str2=wa;则输出为wang;
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
char* Strstr(char* str1, char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
char* i = str1;
char* j = NULL;
while (*i != '\0')
{
j = str2;
char* k = i;//i记录第一次相等时的位置
while (*k!='\0' && *j != '\0' && *k == *j)
{
++k;
++j;
}
if (*j == '\0')
{
return i;//返回i地址,后面一连串的字符串都可以返回
}
++i;
}
return NULL;
}
int main()
{
char str1[] = "lw cun wang";
char str2[] = "wa";
printf("%s", Strstr(str1,str2));
system("pause");
return 0;
}
4.Strchr
strchr(des,‘a’);返回第一个与字符a相等字符下标
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
char* Strchr(const char* des, char s) {
assert(des != NULL);
char* p = des;
for (; *p != '\0'; p++) {
if (*p == s) {
break;
}
}
return p;
}
int main()
{
char* des = "lw cun wang";
char s = 'a';
char* ret = Strchr(des, 'a');
printf("%d", ret - des + 1);
system("pause");
return 0;
}
Memcpy
函数原型:void *memcpy(void *destin, void *source, unsigned n);
从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中;
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
void* Memcpy(void* des, void* src, size_t n)//n表示拷贝多少个字节
{
assert(des != NULL && src != NULL);
char* dest = (char*)des;//定义一个字符型指针,然后将des的地址传给dest
char* srct = (char*)src;
for (size_t i = 0; i < n; ++i)
{
dest[i] = srct[i];
}
return des;
}
int main()
{
char des[1024]= "";
char src[1024] = "lwcunwang";
printf("%s",Memcpy(des, src, 3));//lwc
system("pause");
return 0;
}