当前位置: 首页 > 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;
}

相关文章:

  • CVE-2021-30517:Type confusion bug in LoadSuperIC
  • 双连通分量算法
  • Linux虚拟内存简介
  • Vitalik Buterin香港主旨演讲:协议过去10年迅速发展,但存在效率、安全两大问题
  • 科技云报道:从“奇点”到“大爆炸”,生成式AI开启“十年周期”
  • 【spring】@Scope注解学习
  • 神经网络解决回归问题(更新ing)
  • 属于我们Go语言的toString!
  • UVA230 Borrowers 图书管理系统 解题报告
  • 谈谈Python中的单元测试和集成测试
  • Docker内更新Jenkins详细讲解
  • 如何使用Arduino IDE对STM32F103C8T6进行编程
  • 比较好玩的车子 高尔夫6
  • TCP-IP详解卷一:协议——阅读总结
  • UML学习
  • angular2开源库收集
  • ComponentOne 2017 V2版本正式发布
  • CSS 专业技巧
  • HTML5新特性总结
  • java取消线程实例
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • React-生命周期杂记
  • supervisor 永不挂掉的进程 安装以及使用
  • vue 配置sass、scss全局变量
  • ------- 计算机网络基础
  • 如何学习JavaEE,项目又该如何做?
  • 算法---两个栈实现一个队列
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 阿里云ACE认证之理解CDN技术
  • 阿里云API、SDK和CLI应用实践方案
  • ​2021半年盘点,不想你错过的重磅新书
  • #NOIP 2014# day.1 T2 联合权值
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (13)Hive调优——动态分区导致的小文件问题
  • (function(){})()的分步解析
  • (九)c52学习之旅-定时器
  • (算法)前K大的和
  • (转)我也是一只IT小小鸟
  • ***监测系统的构建(chkrootkit )
  • .NET/C# 使窗口永不获得焦点
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .Net8 Blazor 尝鲜
  • .net经典笔试题
  • ?.的用法
  • @html.ActionLink的几种参数格式
  • @Mapper作用
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [1181]linux两台服务器之间传输文件和文件夹
  • [ARC066F]Contest with Drinks Hard
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • [DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]
  • [HackMyVM]靶场 Quick3
  • [Linux]创建新用户并授予root权限
  • [Mvc]在ASP.NET MVC中使用Repeater