• 【库函数】复习小结


    1.sprintf函数作用为将整型转化为字符串类型

    1. // 判断回文数
    2. bool isPalindrome(int x)
    3. {
    4. char a[200],b[200]={0};
    5. sprintf(a,"%d",x);
    6. int c = strlen(a)-1;
    7. for (int i = 0; a[i]!='\0'; i++)
    8. b[c--] = a[i];
    9. if(strcmp(a,b)==0)
    10. return true;
    11. else
    12. return false;
    13. }

    C 库函数 int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串

    2. strcpy       char *strcpy(char *dest, const char *src) 

    把 src 所指向的字符串复制到 dest

    3.strcat         char *strcat(char *dest, const char *src) 

    把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

    4.strcmp  strcmp(string1,string2)

    比较两个字符串是否相等

    5.strstr  (const char* str1, const char* str2)

    查找子串的一个函数,

    今天在leetcode上又碰到了这种模拟的题目,刚好写下了。

    1. char* my_strstr(const char* str1, const char* str2)
    2. {
    3. assert(str1 && str2);
    4. char *cp = (char*) str1; //利用cp记录 str1的位置信息
    5. char *s1, *s2;
    6. if (!*str2)// 与*s2 == '\0' 等价
    7. return((char*)str1);
    8. while (*cp)
    9. {
    10. s1 = cp;
    11. s2 = (char*) str2;
    12. while (*s1 && *s2 && !(*s1-*s2))//循环直到s1 s2 结束或 s1 != s2
    13. s1++, s2++;
    14. if (!*s2)
    15. return(cp);
    16. cp++;
    17. }
    18. return(NULL);
    19. }
    20. int main()
    21. {
    22. char email[] = "2676887386@qq.com";
    23. char substr[] = "qq";
    24. char* ret = my_strstr(email, substr);
    25. if (ret == NULL)
    26. {
    27. printf("不存在\n");
    28. }
    29. else
    30. {
    31. printf("%s\n",ret);
    32. }
    33. }
    1. int strStr(const char* haystack, const char* needle) {
    2. int end1 = 0;
    3. int end2 = 0;
    4. int len1 = strlen(haystack);
    5. int len2 = strlen(needle);
    6. if(len2 > len1)
    7. {
    8. return -1;
    9. }
    10. int tmp = 0;
    11. int flag = 0;
    12. while (end2 < len2 && end1 < len1)
    13. {
    14. if (haystack[end1] != needle[end2])
    15. {
    16. if (flag == 0)
    17. end1++;
    18. if (flag == 1)
    19. {
    20. end1 = tmp;
    21. end2 = 0;
    22. flag = 0;
    23. tmp = 0;
    24. }
    25. }
    26. else if (haystack[end1] == needle[end2])
    27. {
    28. if (flag == 0)// 利用 tmp 记录第一次相等的位置
    29. {
    30. tmp = end1 + 1;
    31. if(len1 - end1 < len2)
    32. {
    33. tmp = 0;
    34. break;
    35. }
    36. }
    37. end1++;
    38. end2++;
    39. flag = 1;
    40. }
    41. }
    42. return tmp - 1;
    43. }

    6.memcpy      void *memcpy(void *str1, const void *str2, size_t n) 

    从存储区 str2 复制 n 个字节到存储区 str1

    7.memmove   void *memmove(void *str1, const void *str2, size_t n) 

    从 str2 复制 n 个字符到 str1

    但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。

    即 可以自己复制自己

    memcpy 负责拷贝两块独立空间中的数据

     重叠内存的拷贝 是用memmove

  • 相关阅读:
    在vite(vue)项目中使用mockjs
    H3C WX2510H无线控制器开局如何简单配置
    安全运营中心(SOC)技术框架
    为什么和线程有关的方法会被封装在Object类中
    JAVASE 入门
    如何使用tcpdump命令抓包
    【MyBatis-Plas】MyBatis+MP & Spring+MyBatis+MP
    Docker知识:数据卷技术介绍
    Flutter执行flutter doctor报错HTTP Host Availability
    系统分析与设计 复习
  • 原文地址:https://blog.csdn.net/weixin_57560405/article/details/126652293