天天看點

《C語言及程式設計》實踐項目——字元數組與字元串處理

【項目1-m$pszi$y是嘛意思?】

背景:小明讓同學傳紙條給小麗。小麗接到會心一笑,大家卻不知所雲。紙條上寫着m$pszi$y,兩人暗中約定是,真實字元為實際字元前面的第4個!m$pszi$y是神馬意思?推算一下,或從ascii碼表中查一下,自然是i love u。

(1)小明請你寫一個程式,在給小麗寫情書時,再不用費功夫自己“翻譯”,原信中每一個字元加密為其後的第4個字元。例,輸入i love u,輸出m$pszi$y。

(2)小麗請你寫一個程式,在看小明的情書時,讓程式幫着“解密”。因為有同學知道了他們倆人的“加密”手段,決定紙條由人傳,加密數字(1-9)用兩人約好的手勢傳,是以解密時,需要将加密數字作為程式輸入。例,輸入m$pszi$y(回車)4,輸出i love u

(3)小剛常幫着傳紙條,想知道倆人的秘密,但不知道加密數字,于是寫了一個程式,可以列出所有可能的情況。例,輸入m$pszi$y,多行輸出中必然有一行是i love u。你就是小剛,寫出這個程式來吧。

【項目2-字元統計】

下面的程式可以統計出一個字元串中數字字元的個數:

請分别編制程式,完成下面的處理:

(1)統計字母'a'出現的次數;

(2)統計字元串中(大/小寫)字母個數;

(3)統計每一個元音字母個數

(4)統計每一個數字字元出現的次數;

    提示:可以定義一個數組int a[10],儲存’0’-’9’在字元串中出現的次數(例a[0]表示字元’0’的個數)

(5)統計每一個字母出現的個數

【項目3-字元串複制】

下面的程式,将str1中除空格外的所有字元,複制到了str2中。

(1)完整複制字元串;

(2)将str1和str2接起來存放到str3中;

(3)去除str1中的空格,仍儲存在str1中;

(4)将str1和str2連接配接起來,仍存放在str1中;

【項目4-字元串處理函數】

指針是神奇的,指向整型的指針int *p1,可以操作整型數組int a[];指向字元型的指針char *p2,可以操作字元數組(字元串)char str[];更靈活的是,在函數的傳遞中,指針、數組名在一定程度上可以互換。請編制函數,對字元串的進行各種操作。

功能

用數組名作形參

用指針作形參

1

字元串str1和str2連接配接,連接配接後的結果存放到str1中

char *astrcat(char str1[], char str2[])

char *pstrcat(char *str1, char *str2)

2

去除字元串str中的特定字元c(如空格),結果仍儲存到原字元串中

char *adelchar(char str[], char c)

char *pdelchar(char *str, char c)

3

求字元串str的長度并傳回

int astrlen(char str[])

int pstrlen(char *str)

4

統計句子str中單詞的個數

不再重重複,做右邊的(下同)

int pwordnum(char *str)

5

去除句子中第一個單詞前的空格,傳回去除了空格的字元串

char *ptrim(char *str)

6

去除句子中所有多餘的空格,傳回去除了空格的字元串

char *palltrim(char *str)

7

比較兩個字元串,傳回值同strcmp()

int pstrcmp(const char *str1, const char *str2)

提示1:在完成任務時,自編main函數進行測試,測試中,給出的的實際參數可以是以’\0’結束的字元數組,也可以是指向字元的指針。

提示2:在實際項目中,通過包括string.h頭檔案,可以調用c語言中操作字元串的函數完成相關操作,而不必專門定義。

【項目5-程式設計處理c++源代碼】

在codeblocks等ide中都提供了代碼格式整理的功能。我們可以編寫程式,處理的資料就是用c寫的源代碼檔案。c源檔案是一種文本檔案,可以通過程式進行操作。

(1)讀入一個c程式,判斷其中是否隻有一個main()函數,輸出“暫時沒有發現問題”,或者“沒有main()函數”,或者“不能定義多個main()函數”;

提示1:簡單處理,可以隻比較判斷“main()”,考慮實際上的各種可能,main後面的括号中還有其他多種寫法。建議按最簡單的情形處理。

提示2:建議設計一個函數,将讀到的代碼與字元串“main()”進行比較。函數用于判斷s1是否“包含”在讀入的一行s2中,調用時,形參s1處的實參用“main()”即可,這樣寫提升了“抽象”級别,更容易實作,對應更高的代碼品質。

(2)編寫一個程式并取名test.c,統計該檔案中出現"if","while","for"的次數。

(3)讀入一個c程式,使程式中的所有左花括号“{”和右花括号“}”都單獨占一行,新程式儲存到另一個.c檔案中,并在螢幕上顯示處理過的程式,顯示時加上行号。

(4)讀入一個c程式,輸入m、n兩個數字,從第m行起的n行代碼将作為注釋使用(即在這些行前面加上”//”),新程式儲存到另一個.c檔案中。

(5)(拓展,不提供參考解答)讀入一個c++程式,整理其格式,使其按規範排版,包括:①所有左花括号“{”和右花括号“}”都單獨占一行;②每個語句單獨占一行;③各行采用統一的縮格排放(每遇一個“{”,其下一行的程式,在第一個有意義的符号前的空格數增加4,每遇一個“}”,其下一行的程式,在第一個有意義的符号前的空格數減少4。

做完了?你怎麼可以這麼牛?你可以給codeblocks做“source code formatter”插件去了!什麼?微軟的産品中有“內建開發環境(ide)”的,我去不去應聘?嘿嘿,看看薪水再說。不是不可以考慮。

繼續閱讀