当前位置: 首页 > news >正文

(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 cp[30] = { 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 arr2[10] = { 0 };
    my_memcpy(arr2, arr1, 28);
    return 0;
}

http://www.lryc.cn/news/333911.html

相关文章:

  • 交换机与队列的简介
  • 1.docker
  • ThinkPHP审计(2) Thinkphp反序列化链5.1.X原理分析从0编写POC
  • KingbsaeES数据库分区表的详细用法
  • MySQL 索引底层探索:为什么是B+树?
  • XML HTTP传输 小结
  • 相机标定——四个坐标系介绍
  • C++:MySQL数据库的增删改(三)
  • golang - 简单实现linux上的which命令
  • 推荐一个好用的数据库映射架构
  • (013)window的Idea运行程序 Amazon java.nio.file.AccessDeniedException
  • LeetCode 1684. 统计一致字符串的数目
  • uniapp-设置UrlSchemes从外部浏览器H5打开app
  • 校园圈子小程序,大学校园圈子,三段交付,源码交付,支持二开
  • 基于kmeans的聚类微博舆情分析系统
  • 【Docker常用命令(四)】
  • 黑豹程序员-Spring Task实现定时任务
  • 云原生安全当前的挑战与解决办法
  • Qt——Qt实现数据可视化之QChart的使用总结(使用QChart画出动态显示的实时曲线)
  • (React生命周期)前端八股文修炼Day8
  • 考研||考公||就业||其他?-------愿不再犹豫
  • 使用 Selenium 和 OpenCV 识别验证码(使用 Java)
  • 什么是数据库?如何安装SQL Server(超详细版)
  • Golang 开发实战day08 - Multiple Return values
  • 如何成为一名优秀的工程师下
  • Docker【1】:Docker制作Oracle19C镜像
  • Layui三级联动插件使用方法
  • 使用iPhone/安卓手机代替门禁卡
  • UE4_动画基础_角色的缩放
  • 【云开发笔记No.20】中台架构的分类