zoukankan      html  css  js  c++  java
  • C博客作业05--2019-指针

    0.展示PTA总分

    1.本章学习总结

    1.1 学习内容总结

    • 指针做循环变量可将地址做为循环变量,从首地址递增到尾地址。
    • 字符指针表示字符串只需要将指针指向字符串的首地址。
    • 动态分配内存可减少内存的浪费,具体方法可用malloc和calloc函数实现,后者还可以自动为申请的内存赋初值0,需要注意使用函数后需要强制类型转换,如:p=(char )malloc(nsizeof(a))等。
    • 指针数组中存放的是地址,数组名是二级指针。对字符串的存放可以用到指针数组。
    • 二级指针是指向指针的指针,行指针也是一种二级指针。指针数组和二维数组属于二级指针。
    • 指针函数的函数返回值是指针(地址)。

    1.2 本章学习体会

    • 指针较前几章内容更加难以理解,指针的使用也经常出现各种问题,编译运行时也会出现很多报错,对指针的使用时机也不好把握。
    • 两周代码量:710行。

    2.PTA实验作业

    2.1查找子串

    2.1.1 伪代码

    int i = 0;
    int j;
    
    while (s[i] != '') //主串遍历
    {
        j=1;
        if (s[i] == t[0])//主串遇到子串的首字符
        {
    	主串和子串继续比对直到子串结束或者二者不相等
    	如果子串比对到结束符说明找到了,返回子串在主串的首地址
        }
        i++;
    }
    没找到则返回空指针
    

    2.1.2 代码截图

    2.1.3 总结本题的知识点

    1.掌握主串和子串同时遍历比较
        while (s[i] != '') 
        {
            j=1;
            if (s[i] == t[0])
            {
    	    while (s[i + j] == t[j] && t[j] != '') j++;//主串和子串继续比对直到子串结束或者二者不相等
    	    if (t[j] == '') return s + i;	//如果子串比对到结束符说明找到
            }
            i++;
        }
    2.通过比对到子串结束符说明找到子串。
    3.注意两个串的同时移动。
    

    2.1.4 PTA提交列表及说明

    1.部分正确:内循环结束条件不完善。
    2.编译错误:复制到PTA时出错。
    3.部分正确:返回成子串在主串中的尾地址。
    4.部分正确: 忘记返回空指针。
    5.答案正确:内循环加上条件子串不为0,重新找到子串在主串的首地址返回,在末尾加上返回空指针。
    

    2.2合并两个有序数组(2)

    2.2.1 伪代码

    int i, j, k;
    
    k = m + n-1;//合并数组的最后一位
    i = m - 1;//数组a最后一位
    j = n - 1;//数组b最后一位
    
    while (j >= 0)//倒序遍历数组b
    {
       比较最后一位,将大的数放入数组a的末尾并向前一位遍历,大数的数组向前一位小数的数组不动,当数组a遍历结束全部放入数组b的数据
    }
    

    2.2.2 代码截图

    2.2.3 总结本题的知识点

    1.当两数组都有序时,掌握节省时间的比较排序方法。
        while (j >= 0)//倒序遍历数组b
        {
    	a[k--] = i>=0 && a[i] >= b[j] ? a[i--] : b[j--];//比较最后一位,将大的数放入数组a的末尾并向前一位遍历,大数的数组向前一位小数不变,当数组a遍历结束全部放入数组b的数据
        }
    2.注意一个数组提前结束后剩余数据的处理。
    3.注意自增符的使用和结束条件的设置。
    

    2.2.4 PTA提交列表及说明

    1.多种错误:没有成功排序并且超时
    2.部分正确:有两组数据运行超时
    3.部分正确:有一组数据运行超时
    4.答案正确:最开始排序语句出错,后来将两个数组合并后使用选择排序、冒泡排序结果超时,之后使用插入排序边比较边合并还是超时,最后改变排序的思路和方法才答案正确。
    

    2.3 删除字符串中的子串

    2.3.1 伪代码

    定义和输入主串和字串
    int flag=1;
    
    while (flag == 1)
    {
        i = 0;
        while (s1[i] != '')//遍历一遍主串查找子串
        {
            if 找到子串 do
            {
                删除字串
                flag = 2;//表示有删除过字串
            }
            i++;   
        }
        flag = flag == 2 ? 1 : 0;//如果有删除过子串,则再遍历一遍主串查找字串
    }
    输出主串
    

    2.3.2 代码截图

    2.3.3 总结本题的知识点

    1.掌握主串找字串,多次删除主串中的子串
    2.注意可能删除子串后主串又会出现子串需要再次删除。
    3.注意结束删除字串的条件。
    

    2.3.4 PTA提交列表及说明

    1.编译错误:VS上的gets函数需要写出gets_s,复制到PTA忘记更改。
    2.部分正确: 删除主串的子串后,又出现子串。
    3.答案正确:更改gets函数写法,设置循环删除主串的子串,删除一遍后再次遍历主串并且没有删除子串后结束循环。
    

    3.阅读代码

    1.学习库函数string中strcspn函数
    2.功  能: 用来计算字符串s1中连续有几个字符不都属于字符串s2
    3.返回值: 返回字符串s1开头连续不包含字符串s2内的字符数目。所以,如果s1所包含的字符都不属于s2,那么返回s1的长度;如果s1的第一个字符属于s2,那么返回0
    4.用  法: ize_t strcspn(const char *s1, const char * s2)
    5.注意大小写是不同的
    6.该代码运用strlen和strcspn的比较两者是否有重复的字符
    
  • 相关阅读:
    IT人必看的9个故事
    Word中如何隐藏菜单栏
    Delphi MaskEdit用法
    看看哪家银行缩写最牛!
    Delphi TRzButtonEdit的用法
    vagrant box镜像百度下载地址
    Python全国二级等级考试(2019)
    使用Vagrant配置本地开发环境
    Vagrant 如何调整虚拟机的内存大小?
    全国计算机等级考试二级教程2019年版——Python语言程序设计参考答案
  • 原文地址:https://www.cnblogs.com/c4412/p/11962131.html
Copyright © 2011-2022 走看看