# String Manipulation# Conditional Logic# Iteration

e627 - 00492 - Pig-Latin

🔗 前往 ZeroJudge 原題

題目描述

題目要求將輸入的英文句子轉換為 Pig Latin。Pig Latin 的轉換規則如下:

  1. 如果單字以母音(a, e, i, o, u,不區分大小寫)開頭,則在單字結尾加上 "ay"。
  2. 如果單字以子音開頭,則將第一個子音移到單字結尾,然後加上 "ay"。
  3. 單字的大小寫不變。

解題思路

程式碼逐行讀取輸入,並對每個單字進行處理。對於每個單字,程式碼首先判斷該單字是否以母音開頭。如果是,則在單字結尾加上 "ay"。否則,將第一個子音移到單字結尾,然後加上 "ay"。程式碼還需要處理非字母字元,這些字元不進行轉換,直接輸出。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入字串的長度。程式碼需要遍歷輸入字串一次。
  • 空間複雜度: O(m),其中 m 是最長單字的長度。程式碼使用一個臨時字串 tmp 來儲存單字,最長情況下,tmp 的長度等於最長單字的長度。

程式碼

#include <iostream>
using namespace std;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	string a;
	while(getline(cin,a)){
		int al=a.length();
		string tmp;
		for(int i=0;i<al;++i){
			if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
				tmp+=a[i];
			else{
				if(tmp[0]=='A'||tmp[0]=='E'||tmp[0]=='I'||tmp[0]=='O'||tmp[0]=='U'||tmp[0]=='a'||tmp[0]=='e'||tmp[0]=='i'||tmp[0]=='o'||tmp[0]=='u'){
					tmp+="ay";
					int tmpl=tmp.length();
					for(int i=0;i<tmpl;++i)
						cout << tmp[i];
				}
				else if((tmp[0]>='a'&&tmp[0]<='z')||(tmp[0]>='A'&&tmp[0]<='Z')){
					tmp+=tmp[0];
					tmp+="ay";
					int tmpl=tmp.length();
					for(int i=1;i<tmpl;++i)
						cout << tmp[i];
				}
				cout << a[i];
				tmp.clear();
			}
		}
		if(tmp[0]=='A'||tmp[0]=='E'||tmp[0]=='I'||tmp[0]=='O'||tmp[0]=='U'||tmp[0]=='a'||tmp[0]=='e'||tmp[0]=='i'||tmp[0]=='o'||tmp[0]=='u'){
			tmp+="ay";
			int tmpl=tmp.length();
			for(int i=0;i<tmpl;++i)
				cout << tmp[i];
		}
		else if((tmp[0]>='a'&&tmp[0]<='z')||(tmp[0]>='A'&&tmp[0]<='Z')){
			tmp+=tmp[0];
			tmp+="ay";
			int tmpl=tmp.length();
			for(int i=1;i<tmpl;++i)
				cout << tmp[i];
		}
		cout << "\n";
	}
}

Discussion