• 字符串函数----篇章(1)


    目录

    补上章缺失的两道题

    七.笔试题(7)

    八.笔试题(8)

    一.字符串函数 ( 1 )----strlen函数

    二.字符串函数 ( 2 )----strcpy函数

    2-1模拟实现strcpy

    三.字符串函数 ( 3 )----strcmp函数

    ​编辑

     3-1模拟实现strcmp

    四.字符串函数 ( 4 )----strcat函数

    ​编辑

     4-1模拟实现strcat


    猫猫跟你说,每天进步一点点,在未来的某一天,一定会看到见到!!

    人只有坚持把自己变好,就真的会越来越好!!

    补上章缺失的两道题

    七.笔试题(7)

    1. #include
    2. //阿里的笔试题
    3. int main()
    4. {
    5. char* a[] = { "work","at","alibaba" };
    6. char** pa = a;
    7. pa++;
    8. printf("%s\n", *pa);
    9. return 0;
    10. }

    如上图,a是一个字符指针数组,*a指向的是数组首元素地址,因为 **pa=a,所以将数组首元素地址传递给二级指针 pa ,接着pa++,就是第二个字符指针的地址

    在printfh中对pa进行了一次解引用就是a的第二个元素,也就是at,用%s打印就是at

    八.笔试题(8)

        

    1. int main()
    2. {
    3. char* c[] = { "ENTER","NEW","POINT","FIRST" };
    4. char** cp[] = { c + 3,c + 2,c + 1,c };
    5. char*** cpp = cp;
    6. printf("%s\n", **++cpp);
    7. printf("%s\n", *-- * ++cpp + 3);
    8. printf("%s\n", *cpp[-2] + 3);
    9. printf("%s\n", cpp[-1][-1] + 1);
    10. return 0;
    11. }

    如图所示,c对应的是字符指针数组,cp对应的是*c,,上图紫色线表示cp所对应的元素,*cpp=cp,*cpp对应的是首元素地址元素,c+3

    printf("%s\n", **++cpp);

    cpp++ 对应的是 c+2 , *cpp为cp,*cp对应的是c,所以** ++cpp按照%s打印为 POINT

    printf("%s\n", *-- * ++cpp + 3);
    注意,这个++cpp是在上一个printf的基础上进行的,*(cpp++)就是c+1,如左图* -- *++cpp所对应的就是ENTER,在这个基础上 +3 对应的就是ER        


    printf("%s\n", *cpp[-2] + 3); cpp[-2]也就等于cpp-2 ,(注意:cpp[-2]==cpp-2是固定的,一个是指针形式,一个是数组形式) *(cpp-2)对应的是c+3,再进行解应用操作对应的就是FIRST, ​​​FIRST  + 3对应的就是ST


    printf("%s\n", cpp[-1][-1] + 1);也就等于*(*(cpp-1)-1)+1,*(cpp-1)对应的是c+2,*(*(c+2)-1)就是NEW,在这个基础上+1就是E


    指针笔试题还是很有难度的,大家还是要多看几遍,尽量理解透彻!!!!!!!!

    下面进入本章正题

    一.字符串函数 ( 1 )----strlen函数

    由于本字符串函数以前提过,博主在这里就不多做解释了 

    二.字符串函数 ( 2 )----strcpy函数

    通俗点说:strcpy函数就是将逗号后面(源数组)的字符串复制粘贴到逗号前面(目标数组)

    注意:1.前面的数组 (目标数组)可能没有'\0',所以逗号后面的数组(源数组)必须有'\0'

               2.前面的数组(目标数组)的空间要足够大,保证能放下后面数组(源数组)的字符串

               3.前面的数组(目标数组)要可变

    1. int main()
    2. {
    3. char arr1[20] = {0};
    4. char arr2[] = "HELLO";
    5. strcpy(arr1, arr2);
    6. printf("%s\n", arr1);
    7. return 0;
    8. }

    打印出来是 HELLO 

    就是将arr2中的HELLO拷贝到arr1中

    2-1模拟实现strcpy

    1. #include
    2. //
    3. //strcpy函数返回的是目标空间的起始地址
    4. //
    5. char* my_strcpy(char*dest, const char* src)
    6. {
    7. char* ret = dest;
    8. assert(dest && src);
    9. while (*dest++ = *src++)
    10. {
    11. ;
    12. }
    13. return ret;
    14. }
    15. int main()
    16. {
    17. char arr1[20] = { 0 };
    18. char arr2[] = "abc";
    19. /*
    20. my_strcpy(arr1, arr2);
    21. printf("%s\n", arr1);
    22. */
    23. //两种写法都可以
    24. printf("%s\n", my_strcpy(arr1, arr2));
    25. return 0;
    26. }

    三.字符串函数 ( 3 )----strcmp函数

    stcmp函数用来比较两个字符串 

    上面翻译的很详细,就不做多余的解释了

    1. int main()
    2. {
    3. char arr1[] = "abq";
    4. char arr2[] = "abc";
    5. if (strcmp(arr1, arr2) > 0)
    6. {
    7. printf(">\n");
    8. }
    9. else
    10. {
    11. printf("<=\n");
    12. }
    13. return 0;
    14. }

     输出  >

     3-1模拟实现strcmp

    1. int my_strcmp(const char* str1, const char* str2)
    2. {
    3. assert(str1 && str2);
    4. while (*str1 == *str2)
    5. {
    6. if (*str1 == '\0')
    7. return 0;
    8. str1++;
    9. str2++;
    10. }
    11. return *str1 - *str2;
    12. }
    13. int main()
    14. {
    15. char arr1[] = "abq";
    16. char arr2[] = "abc";
    17. if (my_strcmp(arr1, arr2) > 0)
    18. {
    19. printf(">\n");
    20. }
    21. else
    22. {
    23. printf("<=\n");
    24. }
    25. return 0;
    26. }

     输出  >

    四.字符串函数 ( 4 )----strcat函数

    strcat函数用来追加字符串,将逗号后面的数组追加到逗号前面的末尾,从'\0'的位置开始追加

    注意:1.逗号后面的数组(源数组)必须有'\0'

            2.前面的数组(目标数组)的空间要足够大,保证能放下后面数组(源数组)的字符串

            3.前面的数组(目标数组)要可变

    1. int main()
    2. {
    3. char arr1[20] = "abc";
    4. strcat(arr1, arr1);//strncat
    5. printf("%s\n", arr1);
    6. return 0;
    7. }

     输出 abcabc

     4-1模拟实现strcat

    1. //strcat函数,返回的是目标空间的起始地址
    2. char* my_strcat(char* dest, const char* src)
    3. {
    4. char* ret = dest;
    5. assert(dest && src);
    6. //1. 找到目标空间的末尾
    7. while (*dest != '\0')
    8. {
    9. dest++;
    10. }
    11. //2. 数据追加
    12. while (*dest++ = *src++)
    13. {
    14. ;
    15. }
    16. return ret;
    17. }
    18. int main()
    19. {
    20. char arr1[20] = "abc";
    21. char arr2[] = "def";
    22. my_strcat(arr1, arr2);
    23. printf("%s\n", arr1);
    24. return 0;
    25. }

    输出的是  abcdef

    记得点个关注,要不然容易找不到!!!!

    下一章继续更新字符串函数,敬请期待

    如果有解释的不对或者不清晰,麻烦大佬们海涵,如果可以烦请从评论区指出,我一定会加以修改,万分感谢

    最后麻烦大佬们动一下你们的小手一键三连,万分感谢

  • 相关阅读:
    米桃安全漏洞讲堂系列第4期:WebShell木马专题
    2022最新 wifi大师小程序独立版3.0.8
    快速构建代理应对
    HTML入门知识点
    阿帽的小狗
    Dubbo + Nacos 服务启动报错,返回unknown user
    浅谈IT隔离电源系统在医疗场所的接地设计研究与应用
    实战:自定义简单版redux, enhancer与react-redux
    MongoDB索引操作
    前端开发——HTML5新增加的表单属性
  • 原文地址:https://blog.csdn.net/2201_75886757/article/details/133140498