# String Manipulation# Array# Conditional Logic

k515 - Ironweed

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取多行字串,將所有大寫字母轉換為小寫字母,然後輸出這些字串。如果字串是 "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] << " "; 
	}
}

Discussion