C博客做業05--2019-指針

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上一次就過,但在實際操做中,因爲是第一個練習的題目,仍有許多值得學習、值得回憶的地方。c++

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 總結本題的知識點

相關文章
相關標籤/搜索