k515 - Ironweed
題目描述
題目要求讀取多行字串,將所有大寫字母轉換為小寫字母,然後輸出這些字串。如果字串是 "the", "a", "an", "in", "on", "at", "of", "for", "by", "to", "and", "or", "but" 中的一個,且是第一行或最後一行,則將該字串的第一個字母改回大寫。否則,將所有字串的第一個字母改回大寫。
解題思路
程式首先讀取多行字串,並將每個字串中的大寫字母轉換為小寫字母。然後,程式檢查每個字串是否在預定義的停用詞列表中。如果字串是停用詞,且是輸入的第一行或最後一行,則將該字串的第一個字母改回大寫。否則,如果字串不是停用詞,則將該字串的第一個字母改回大寫。最後,程式輸出所有處理後的字串。
複雜度分析
- 時間複雜度: O(n*m),其中 n 是輸入字串的數量,m 是每個字串的平均長度。
- 空間複雜度: O(n*m),用於儲存輸入字串。
程式碼
#include <iostream>
using namespace std;
int n,ofs='a'-'A';
string b[13]={"the", "a", "an", "in", "on", "at", "of", "for", "by", "to", "and", "or", "but"},a[505],s;
int main(){
while(cin >> s){
for(int i=0;i<s.size();++i){
if(s[i]>='A'&&s[i]<='Z'){
s[i]+=ofs;
}
}
a[n++]=s;
}
for(int i=0;i<n;++i){
bool isc=0;
for(int j=0;j<13;++j){
if(a[i]==b[j]){
isc=1;
break;
}
}
if(isc){
if(i==0||i==n-1){
a[i][0]-=ofs;
}
}
else a[i][0]-=ofs;
cout << a[i] << " ";
}
}