UVa 492 Pig-Latin
题目描述题目要求将输入文本中的每个单词转换为Pig Latin\texttt{Pig Latin}Pig Latin。单词定义为连续的字母序列不区分大小写。转换规则如下若单词以元音字母a,e,i,o,u\texttt{a,e,i,o,u}a,e,i,o,u及其大写形式开头则在单词末尾添加ay。若单词以辅音字母开头则将第一个字母移到单词末尾再添加ay。非字母字符如空格、标点等原样输出不进行转换。输入格式输入包含多行文本。每行包含任意数量的字符。输入以文件结束符EOF\texttt{EOF}EOF终止。输出格式输出转换后的文本保持原空格和标点位置不变。样例输入This is the input.输出hisTay isay hetay inputay.题目分析本题的核心是逐字符处理输入识别单词并应用转换规则。算法步骤逐字符读取输入。若当前字符是字母则将其加入当前单词缓冲区。若当前字符不是字母若缓冲区非空则对缓冲区中的单词进行转换并输出。输出当前非字母字符。清空缓冲区。处理完所有字符后若缓冲区非空则输出最后转换的单词。转换规则判断首字母是否为元音不区分大小写若是输出原单词后加ay。若不是输出原单词去掉首字母后的部分然后输出首字母最后加ay。注意保持原单词的大小写首字母移动后应保持原有大小写规则中说明“不改变任何字母的大小写”因此移动后的首字母应保持原样输出如样例中This变为hisTay首字母T被移到最后仍为大写。复杂度分析每个字符处理一次时间复杂度O(L)O(L)O(L)。代码实现// Pig-Latin// UVa ID: 492// Verdict:// Submission Date:// UVa Run Time: s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intmain(intargc,char*argv[]){ios::sync_with_stdio(false);cin.unsetf(ios::skipws);charinput;string block;while(cininput){if(isalpha(input))blockinput;else{if(block.length()0){charvoweltolower(block.front());if(vowela||vowele||voweli||vowelo||vowelu)coutblockay;else{charfrontblock.front();block.erase(block.begin());coutblockfrontay;}}coutinput;block.clear();}}return0;}