e627 - 00492 - Pig-Latin
題目描述
題目要求將輸入的英文句子轉換為 Pig Latin。Pig Latin 的轉換規則如下:
- 如果單字以母音(a, e, i, o, u,不區分大小寫)開頭,則在單字結尾加上 "ay"。
- 如果單字以子音開頭,則將第一個子音移到單字結尾,然後加上 "ay"。
- 單字的大小寫不變。
解題思路
程式碼逐行讀取輸入,並對每個單字進行處理。對於每個單字,程式碼首先判斷該單字是否以母音開頭。如果是,則在單字結尾加上 "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";
}
}