有一種標題格式稱為「title case」,其將所有單字的首字母採用大寫格式,其它字母則採小寫。不過以下這些冠詞、介系詞及連接詞「the、a、an、in、on、at、of、for、by、to、and、or、but」,只有當它們是第一個單字或最後一個單字時才需首字母大寫。
舉例來說,海明威作品《戰地鐘聲》英文名稱以前述格式呈現為「For Whomthe Bell Tolls」,費茲傑羅之作品《大亨小傳》英文名稱呈現為「The Greal Gaisby」。
請你撰寫一個程式,給定一個題目標題,請你將該標題依照「title case」的規定,將其修正成符合標題規定的格式。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入為一長度不超過 500 字元的字串,只會包含大小寫英文字母,單字與單字間以一個空白隔開。 | 請輸出一個字串,為修正過後的題目標題。 |
ironweed | Ironweed |
WiDe sargaSSO | Wide Sargasso |
The SOUND and FURY | The Sound and Fury |
for whom the bell tolls | For Whom the Bell Tolls |
The catcher In THe rye | The Catcher in the Rye |
what men live by | What Men Live By |
解題思路
使用 EOF 的方式將字串收起來,每次收到資料時就將該字串 Push_Back 到一個 Vector 中。
將所有字母先變成小寫的,如果該字串為第一個或最後一個就將第一個字元大寫,如果不是且是特殊字串 (the、a、an、in、on、at、of、for、by、to、and、or、but) 就不做更動進行輸出,如果都不是就將第一個字元大寫並輸出。
範例程式碼-ZeroJudge K515: 標題 (Title)
#include <iostream>
#include <vector>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
string str;
vector<string>v;
while (cin >> str) v.push_back(str);
for (int i = 0; i<v.size(); i++) {
for (int j = 0; j<v[i].length(); j++) v[i][j] = tolower(v[i][j]);
if (i == 0 || i == v.size()-1) {
v[i][0] = toupper(v[i][0]);
cout << v[i] << " ";
continue;
}
string s = v[i];
if (s == "the" || s == "a" || s == "an" || s == "in" || s == "on" || s == "at" || s == "of" || s == "for" || s == "by" || s == "to" || s == "and" || s == "or" || s == "but") {
cout << s << " ";
}
else {
s[0] = toupper(s[0]);
cout << s << " ";
}
}
cout << "\n";
}
//ZeroJudge K515
//Dr. SeanXD