C博客作业05--2019-指针

眉间皱痕 提交于 2019-12-06 07:03:48

0.展示PTA总分

1.本章学习总结

1.1 学习内容总结

1.2 本章学习体会

2.PTA实验作业

2.16 -7 输出月份英文名

2.1.1 伪代码

char* getmonth(int n)
{
    char* month[12] = { ... }利用指针数组储存每个月份的英文名

    if(n为1到12月份) 返回对应月份地址month[n-1]//需注意的是这里的下标应该是n-1,而不是n
    else  返回空指针
}

2.1.2 代码截图

2.1.3 总结本题的知识点

    
    知识点://该题知识点较简单,但也最为基础经典
        
      该题反映了如何使用指针数组来记录多个字符串
      char* month[12] = { ... };

      在主函数中,记录多个字符串也可以利用二维数组定义,如:
      char month[12][20];//12个月份,每个英文字符串最多20个字节


    总结:

      通常,要记录多个字符串时,利用二维数组和指针数组均可。

      比较:利用指针数组的好处是不用考虑每个字符串的长度,而二维数组则一一对应更为直观好理解


    需要注意的是!** 该题是函数接口,因此应当返回有效的指针地址,因此只能利用指针数组来做,不能直接用二维数组定义**


    ** 拓展**//老师上课拓展的笔记

      返回指针的函数一般都返回** 全局数据对象** ,** 堆区的指针** ,** 指向字符串常量的地址** ,** 主调函数中数据对象的地址** 或** 指针数组** 。

      因此若一定要使用二维数组,应当如下修改:

        static char month[12][20];//
      

2.1.4 PTA提交列表及说明

该题较基础简单,所以PTA上一次就过,但在实际操作中,由于是第一个练习的题目,仍有许多值得学习、值得回忆的地方。

1.一开始想要利用指针数组编写。然而在实际编写过程中总是有红色的波浪线,也就是语法错误。于是我只好换种写法,利用二维数组编写,在编写过程中显然语法是没错的,但运行测试时却是一大堆奇怪的字符,这让我百思不得其解。

最后上课时老师也进行了解释,由于该题做的是函数接口,在函数中定义的只是局部变量,当返回时也已经消亡了,所以才会出现一大堆奇怪的字符,因为地址已经不知道指到哪去了。
书本上预习时也有读到相关内容,但是在真正应用中还是没法马上反应过来,而经过这题,对在分装函数中返回有效的指针地址有了更多的理解。
同时课堂上也拓展了在返回指针的函数中哪些能返回,以及该题目利用二维数组的方法(总结在上部分的知识点中)

2.最终我是利用指针数组写的,但在编写过程中,总是出现红色波浪线(说明语法错误)。因此上百度搜索。
最终解决办法是:在VS编译器 属性-> c/c++ -> 语言 -> 修改符合模式

2.2 6-6 查找子串

2.2.1 伪代码

char* Search(char* s, char* t)
{
    char* ps;用来保存s串中出现相同的第一个字符的地址
    char* pt = t;用来保存t串的首地址


    while (*s!=0) //遍历s字符串
    {
        if (s中的某个字符与t串第一个字符相同)
        { 
            ps = s; 记录出现相同第一个字符的地址

            while 遍历t串
            {
             if (比较字符若不同) break;
             else 地址自增,继续比较
            }

            if (若t串全部遍历) 则说明其后的字符也都相同,返回地址ps

            若进行到这步则说明不同,由于比较过程中指针移动了,因此将s恢复到已经比较的位置,t恢复到首地址,以便下次比较。
            即 s = ps;t=pt
        }
        s++;
    }
    if(若s串全部遍历) 则说明s中找不到t串,返回空指针
}

2.2.2 代码截图

2.2.3 总结本题的知识点

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!