iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
Software Development

C++ 三十天學習紀錄系列 第 26

【Day 26】C String - Practice 1

  • 分享至 

  • twitterImage
  •  

前言
即使我們看完了 Cstring 的影片,卻還是對於他蠻模糊的吧!我自己是寫了一些題目後才對 Cstring 到底要怎麼用感到熟悉,所以接下來我會一連講好幾個 Cstring 的課堂練習,都不會太複雜,卻能幫助我們仔細想想要如何應用 character。

Q1.

題目、輸入輸出格式

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;

Q2.

題目、輸入輸出格式

Sol.
與第一題類似,建非常長的字原來存所要輸入的資料,這邊因為會可能會更動到輸入之資料,不過最好是不要動到,所以我們另外再建一新字元陣列來進行判斷,因此先建立兩個字元字串,分別為strans

與第一題不同的是,我們接下來要使用的是 while 迴圈,當有輸入東西時才做判斷並輸出,因此到最後一個字元時就不會再輸出任何字元,批改系統就會認定我們已經結束這段程式碼。

此外,這題也需要用到strlentouppertolower等函式。

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 迴圈是可行的!接下來我們再多看幾題吧!


上一篇
【Day 25】C String
下一篇
【Day 27】C String - Practice 2
系列文
C++ 三十天學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言