(26)4.7 字符函数和字符串函数

#include<stdio.h>

#include<string.h>

#include<assert.h>

//int my_strcmp(const char* str1, const char* str2)

//{

// assert(str1 && str2);//指针有效性,不能为空指针

// while (*str1 == *str2)

// {

// if (*str1 == '\0')

// return 0;//相等的情况

// str1++;

// str2++;

// }

// if (*str1 > *str2)

// return 1;

// else (*str1 < *str2)

// return -1;

//}

//简化

int my_strcmp(const char* str1, const char* str2)

{

assert(str1 && str2);//指针有效性,不能为空指针

while (*str1 == *str2)

{

if (*str1 == '\0')

return 0;//相等的情况

str1++;

str2++;

}

return(*str1 - *str2);

}

int main()

{

char arr1\[\] = "abcde";

char arr2\[\] = "abcf";

int ret = my_strcmp(arr1, arr2);

if (ret < 0)

printf("<");

if (ret == 0)

printf("==");

if (ret> 0)

printf(">");

return 0;

}

效率比较低

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)

{

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 email\[\] = "zpw@bitejiuyeke.com";

char substr\[\] = "bitejiuyeke";

char* ret = my_strstr(email, substr);

if (ret == NULL)

{

printf("子串不存在\n");

}

else

{

printf("%s\n", ret);

}

return 0;

}

KMP算法

这个算法也是用来实现一个字符串中查找字符串的

效率高,但实现难度大

B站搜索:比特大博哥,可以找到KMP算法实现

strtok 切

int main()

{

const char* sep = "@.";

char email\[\] = "zhangpengwei@bitjiuyeke.com";

char cp30 = { 0 };

//strcpy(cp, email);

//char* ret = strtok(cp, sep);

//printf("%s\n", ret);

//char* ret = strtok(NULL, sep);

//printf("%s\n", ret);

//char* ret = strtok(NULL, sep);

//printf("%s\n", ret);

//简化

char* ret = NULL;

for (ret = strtok(cp, sep); ret != NULL; ret = strtok(NULL, sep))

{

printf("%s\n", ret);

}

return 0;

}

///memcpy两块独立数据之间的拷贝函数,不能对同一块空间重叠拷贝与之对应的memmove

void* my_memcpy(void* dest, const void* src, size_t num)

{

assert(dest && src);

void* ret = dest;

while (num--)

{

*(char*)dest = *(char*)src;

dest = (char*)dest + 1;

src = (char*)dest + 1;

}

return ret;

}

int main()

{

int arr1\[\] = { 1,2,3,4,5,6,7 };

int arr210 = { 0 };

my_memcpy(arr2, arr1, 28);

return 0;

}

相关推荐
幼儿园蛋小黑8 分钟前
【无标题】C语言变量,类型转换,运算符,输入和输出
c语言·嵌入式实时数据库
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出独特卡片数字——只出现一次的元素
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
代码王同学3 小时前
2026.9.15日C++类和对象学习收获笔记
c语言·c++
irislinAmelia3 小时前
Day11文章_多路视频流加权公平调度与令牌桶QoS
c语言·人工智能
云泽80817 小时前
STM32 USART 详解(八):C I/O 串口重定向原理与实现
c语言·stm32·嵌入式硬件
ThornArmor17 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
T1mzhou17 小时前
ARM64 Linux 6.10 内核驱动(12):dd.c:probe/ remove、延迟 probe
linux·服务器·c语言·arm开发·arm
白色的北极熊18 小时前
c语言 scanf 输入流有空格,逗号 说明
c语言
Logic10119 小时前
C语言/数据结构位运算题解:异或XOR找出货船中的“独特载货量“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
xx~t1 天前
嵌入式——51单片机3
linux·c语言·嵌入式硬件·51单片机