#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
void my_strcpy1(char* des, char* start)
{
while (*start!='\0')
{
*des = *start;
start++;
des++;
}
*des = '\0';
}
void my_strcpy2(char* des, char* start)
{
while (*des++ = *start++);
}
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest;
while (*dest++ = *src++);
return ret;
}
int main()
{
char a[] = "abcdef";
char b[20] = { 0 };
//my_strcpy1(b, a);
//my_strcpy2(b, a);
my_strcpy(b,a);
printf("%s\n", b);
return 0;
}
#include<stdio.h>
#include<string.h>
//strcat 是字符串追加函数
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
//dest指向'\0'
while (*dest != '\0')
{
dest++;
}
// 拷贝字符串
while (*dest++ = *src++);
return ret;
}
int main()
{
char a[20] = "hello ";
//my_strcat(a, "world");
//printf("%s\n", a);
strcat(a,"world");
printf("%s\n", a);
return 0;
}
#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++;
}
/*if (*p1 > *p2)
{
return 1;
}
else
{
return -1;
}*/
//关于上面if,else语句的简写
return (*p1 - *p2);
}
//strcmp 模拟实现简化版
int my_strcmp(const char* p1, const char* p2)
{
while (*p1++ == *p2++ && *p1 == '\0');
return (*p1 - *p2);
}
int main()
{
char a[] = "azz";
char b[] = "azz";
int ret = my_strcmp(a, b);
if (ret>0)
{
printf("a>b\n");
}
else if (ret < 0)
{
printf("a<b\n");
}
else
{
printf("a==b\n");
}
return 0;
}
#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
const char* s1 = str1;
const char* s2 = str2;
const char* p = str1;
while (*p != '\0')
{
s1 = p;
s2 = str2;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)p;
}
p++;
}
return NULL;
}
int main()
{
char a[] = "babfcd";
char b[] ="abcd";
//gets(b);
char* ret = strstr(a, b);
//char* ret = my_strstr(a, b);//用来在一个字符串里寻找目标字符的函数(strstr)
if (ret != NULL)
{
printf("%s\n", ret);
}
else
{
printf("子串不存在\n");
}
return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
char a[] = "zhangsan@qq.com";
char* p = "@.";//p 指向的是分割符,分隔符可以是一个也可以是多个
char b[50];//因为strtok会把改变字符串,会一般修改都是用临时拷贝一份的字符串
strcpy(b, a);
//srtok函数可以把字符串,切割成多个部分,它会将字符串中的分割符改为 '\0',所以第二次调用的时候第一个参数变成了NULL
// 在第一次调用时,该函数需要一个 C 字符串作为 str 的参数,其第一个字符用作扫描令牌的起始位置。
// 在后续调用中,该函数需要一个空指针,并使用最后一个标记末尾的位置作为扫描的新起始位置。
//char* ret = NULL;
///*for (ret = strtok(b, p); ret != NULL; ret = strtok(NULL, p))
//{
// printf("%s\n",ret);
//}
//*/
char*ret = strtok(b, p);
if (ret != NULL)
{
printf("%s\n", ret);
}
ret = strtok(NULL, p);
if (ret != NULL)
{
printf("%s\n", ret);
}
ret = strtok(NULL, p);
if (ret != NULL)
{
printf("%s\n", ret);
}
// 输出结果如下
// zhangsan
// qq
// com
return 0;
}
字符函数模拟实现
最新推荐文章于 2024-08-09 20:36:57 发布