前言
即使我們看完了 Cstring 的影片,卻還是對於他蠻模糊的吧!我自己是寫了一些題目後才對 Cstring 到底要怎麼用感到熟悉,所以接下來我會一連講好幾個 Cstring 的課堂練習,都不會太複雜,卻能幫助我們仔細想想要如何應用 character。
題目、輸入輸出格式
Sol.
建立一個非常長的字元陣列,並使用cin.getline
,也就是把每一個字元都當作陣列裡的一項。設一變數cnt
,代表計算所要計算的標點符號。
Pseudocode
char str[1000];
int cnt = 0;
cin.getline(str, 1000);
for i in range 0~strlen(str)
if str == ’,’ or ‘.’ or ‘:’ or ‘:’ or ‘!’ or ‘?’
cnt++;
輸出cnt;
題目、輸入輸出格式
Sol.
與第一題類似,建非常長的字原來存所要輸入的資料,這邊因為會可能會更動到輸入之資料,不過最好是不要動到,所以我們另外再建一新字元陣列來進行判斷,因此先建立兩個字元字串,分別為str
、ans
。
與第一題不同的是,我們接下來要使用的是 while 迴圈,當有輸入東西時才做判斷並輸出,因此到最後一個字元時就不會再輸出任何字元,批改系統就會認定我們已經結束這段程式碼。
此外,這題也需要用到strlen
、toupper
、tolower
等函式。
Pseudocode
char str[1000];
char ans[1000];
int CNT = 0;
while (cin >> str) {
if 還沒輸入任何東西 // CNT = 0
for i in range 0~strlen(str)
if 是這個單字的字首
ans[i] = toupper
cout << ans[i]
else
ans[i] = tolower
cout << ans[i]
CNT++; // 確保下一次不會再跑進來
}
else
輸出一格空白,使得每個單字後面都有空格
ans[i] = toupper
cout << ans[i]
else
ans[i] = tolower
cout << ans[i]
結語
這兩題用了兩種方式來輸入:cin.getline( )、while(cin >> str),差別在於第一題是要全部資料都讀完才能輸出答案,如果我們用 while,這個迴圈會一直不斷等待東西輸入進來,於是這段程式碼就永遠都不會停下來。
第二題則是因為當輸入完最後一個字元,我們要輸出的東西也都輸出完了,沒有要再輸入的資料的話,批改系統就會自己停止,因此使用 while 迴圈是可行的!接下來我們再多看幾題吧!