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

2.1.2 代码截图

C博客作业05--2019-指针_第1张图片

2.1.3 总结本题的知识点

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

2.1.4 PTA提交列表及说明

C博客作业05--2019-指针_第2张图片

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 代码截图

C博客作业05--2019-指针_第3张图片

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] != '\0')//遍历一遍主串查找子串
    {
        if 找到子串 do
        {
            删除字串
            flag = 2;//表示有删除过字串
        }
        i++;   
    }
    flag = flag == 2 ? 1 : 0;//如果有删除过子串,则再遍历一遍主串查找字串
}
输出主串

2.3.2 代码截图

C博客作业05--2019-指针_第4张图片

2.3.3 总结本题的知识点

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

2.3.4 PTA提交列表及说明

C博客作业05--2019-指针_第5张图片

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

3.阅读代码

C博客作业05--2019-指针_第6张图片

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的比较两者是否有重复的字符

你可能感兴趣的:(C博客作业05--2019-指针)