当前位置: 首页 > 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学习
  • @jsonView过滤属性
  • 【comparator, comparable】小总结
  • 【刷算法】求1+2+3+...+n
  • Android Volley源码解析
  • Bootstrap JS插件Alert源码分析
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • flask接收请求并推入栈
  • GitUp, 你不可错过的秀外慧中的git工具
  • Git学习与使用心得(1)—— 初始化
  • Hibernate【inverse和cascade属性】知识要点
  • React+TypeScript入门
  • React-flux杂记
  • Theano - 导数
  • 阿里云购买磁盘后挂载
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 手机端车牌号码键盘的vue组件
  • 线性表及其算法(java实现)
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 国内开源镜像站点
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #HarmonyOS:Web组件的使用
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (+4)2.2UML建模图
  • (13)Hive调优——动态分区导致的小文件问题
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (第二周)效能测试
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (一)为什么要选择C++
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .Net 6.0 处理跨域的方式
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net7 环境安装配置
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .Net中的集合
  • .Net中间语言BeforeFieldInit
  • @Autowired 与@Resource的区别
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ C++ ] STL_vector -- 迭代器失效问题