• c语言练习41:深入理解字符串函数strlen strcpy strcat


    深入理解字符串函数strlen   strcpy   strcat

    模拟实现:”strlen   strcpy   strcat

    strlen

     

    strcat:

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. #include
    4. strlen
    5. 1.通过指针移动模拟
    6. //int my_strlen(char* str) {
    7. // size_t count = 0;
    8. // assert(str != NULL);
    9. // while (*str != '\0') {
    10. // count++;
    11. // str++;
    12. // }
    13. // return count;
    14. //}
    15. 2.通过指针减指针模拟
    16. //int my_strlen(char* str) {
    17. // char* start = str;
    18. // while (*str != '\0') {
    19. // str++;
    20. // }
    21. // return str - start;
    22. //}
    23. //通过递归模拟
    24. //int my_strlen(char* str) {
    25. // if (*str != '\0')
    26. // return 1 + my_strlen(str + 1);
    27. // else
    28. // return 0;
    29. //}
    30. //int main() {
    31. // char arr[] = "abcd";
    32. // size_t len=my_strlen(arr);
    33. // printf("%zd\n", len);
    34. // return 0;
    35. //}
    36. //模拟实现strcpy
    37. //strcpy的功能是将原字符串拷贝到目标空间
    38. //所以返回目标空间的起始地址,方便观察目标空间的数据
    39. //#include
    40. //#include
    41. //版本1
    42. //void my_strcpy(char* dest, char* str) {
    43. // while (*str != '\0') {
    44. // *dest = *str;
    45. // str++;
    46. // dest++;
    47. // }
    48. // *dest = *str;
    49. //}
    50. //版本2
    51. //dest指向的空间是需要改变的,而src指向的空间是不需要被改变的
    52. //void my_strcpy(char* dest, const char* str) {//加上const可以提高代码的健壮性
    53. // assert(dest && str);//解引用时指针不能为空
    54. // while (*dest++ = *str++) {//()内为赋值表达式且'\0'的ASCII为0
    55. // ;
    56. // }
    57. //}
    58. //版本3
    59. //char* my_strcpy(char* dest,const char* str) {
    60. // char* start = dest;//dest为1级指针然后赋给start
    61. // //判断是否为空指针
    62. // assert(dest);
    63. // assert(str);
    64. // while (*dest++=*str++)
    65. // {
    66. // ;
    67. // }
    68. // return start;//返回目标空间的起始地址
    69. //}
    70. //int main() {
    71. // char arr1[] = "abcd";
    72. // char arr2[20] = {0};
    73. // my_strcpy(arr2, arr1);
    74. // printf("%s\n", arr2);
    75. // 版本3:链式访问
    76. // ///*printf("%s\n", my_strcpy(arr2, arr1));*/
    77. // return 0;
    78. //}
    79. 模拟strcat---字符串的追加
    80. my_strcat无法实现自身追加自身------因为目标空间的'\0'会被覆盖
    81. -------------------但strcat可实现-------------------
    82. 注:1.目标空间的有'\0'(从哪里开始追加),源头空间也得有'\0'(追加到什么时候结束)
    83. 2.目标空间足够大且目标空间可修改
    84. 测试
    85. #include
    86. #include
    87. int main() {
    88. char arr1[20] = "hello \0xxxxxxxxxx";
    89. char* p = "world";
    90. strcat(arr1, p);
    91. printf("%s\n", arr1);
    92. return 0;
    93. }
    94. 模拟实现strcat
    95. strcat返回目标空间的起始地址
    96. //#include
    97. //#include
    98. //char* my_strcat(char* dest, const char* src) {
    99. // char* start = dest;
    100. // assert(dest);
    101. // assert(src);
    102. // //1.找到目标空间中的'\0'
    103. // while (*dest!='\0')
    104. // {
    105. // dest++;
    106. // }
    107. // //2.完成拷贝
    108. // while (*dest++=*src++)
    109. // {
    110. // ;
    111. // }
    112. // return start;
    113. //}
    114. //int main() {
    115. // char arr1[20] = "hello";
    116. // char* p = "world";
    117. // my_strcat(arr1, p);
    118. // printf("%s\n", arr1);
    119. // return 0;
    120. //}
    121. //strncat可实现自身追加自身

  • 相关阅读:
    SpringBoot:使用jpa实现对Apache Geode的基本操作
    CF - D. Reset K Edges(二分答案,模拟)
    怎么把pdf转换为excel表格?有什么实用的转换工具?
    MySQL-分组查询( GROUP BY/WITH ROLLUP/HAVING)& SELECT原理
    什么是谷歌SEO搜索引擎优化
    道德与社会问题简报 #4: 文生图模型中的偏见
    Spring Boot 的参数校验方案
    C++之虚函数与虚函数表
    Go语言基础之包
    基于极限学习机 (ELM) 进行正弦波预测(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/2301_77479435/article/details/132725316