zoukankan      html  css  js  c++  java
  • Pig-Latin(ICPC冬令营集训题目)

    Pig-Latin

    Problem Description

    You have decided that PGP encryptation is not strong enough for your email.
    You have decided to supplement it by first converting your clear text letter into Pig Latin before encrypting it with PGP.

    Input and Output

    You are to write a program that will take in an arbitrary number of lines of text and output it in Pig
    Latin. Each line of text will contain one or more words. A “word” is defined as a consecutive sequence
    of letters (upper and/or lower case). Words should be converted to Pig Latin according to the following
    rules (non-words should be output exactly as they appear in the input):

    1. Words that begin with a vowel (a, e, i, o, or u, and the capital versions of these) should just
      have the string “ay” (not including the quotes) appended to it. For example, “apple” becomes
      “appleay”.
    2. Words that begin with a consonant (any letter than is not A, a, E, e, I, i, O, o, U or u) should
      have the first consonant removed and appended to the end of the word, and then appending “ay”
      as well. For example, “hello” becomes “ellohay”.
    3. Do not change the case of any letter.
    Sample Input
    This is the input.
    1
    
    Sample Output
    hisTay isay hetay inputay.
    1
    
    • 输入和输出
    • 请您编写一个程序,输入任意数量行的文本,并以Pig Latin输出。 每行文本将包含一个或多个单词。一个“单词”被定义为一个连 续的字母序列(大写字母和/或小写字母)。单词根据以下的规则 转换为Pig Latin,非单词的字符在输出时则和输入中出现的完全 一样:
    • [1] 以元音字母(a、e、i、o或u,以及这些字母的大写形式)开 头的单词,要在其后面附加字符串“ay”(不包括双引号)。例 如,“apple”变成“appleay”。
    • [2] 以辅音字母(不是A, a, E, e, I, i, O, o, U 或 u的任何字母)开头 的单词,要去掉第一个辅音字母,并将之附加在单词的末尾,然 后再在单词的末尾加上“ay”。例如,“hello”变成“ellohay”。
    • [3] 不要改变任何字母的大小写。
    Analysis of Test Questions

    1.非字母字符,直接输出;如果是单词(一个连续的字母序列),则判定是否以辅音开头,如果以辅音开头把辅音字母放到单词最后。最后在单词后面加“ay”。
    2.设计两个函数is(char c)判断字符c是否是字母,和vowel(char c)判断字符c是否是元音字母。

    理解变量是理解程序的关键

    AC代码
    #include<iostream>
    #include<cstdio>
    
    using namespace std;
    
    const int N=1000005;
    
    char temp[N];
    
    int isab(char c){//判断是否是字母
        if(c>='a'&&c<='z')return 1;
        if(c>='A'&&c<='Z')return 1;
        return 0;
    }
    
    int vowel(char c){//判断是否是元音字母
        if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
            return 1;
        if(c=='A'||c=='E'||c=='I'||c=='O'||c=='U')
            return 1;
        return 0;
    }
    
    int main(){
        while(gets(temp)){
            int s=0,t=0;
            while(temp[s]){
                if(!isab(temp[s])){//不是字母,直接输出
                    printf("%c",temp[s++]);
                    t=s;
                }else if(isab(temp[t])){//是字母
                    t++;
                }else {
                    if(!vowel(temp[s])){//辅音字母开头
                        for(int i=s+1;i<t;i++)
                            printf("%c",temp[i]);
                        printf("%c",temp[s]);
                    }else {//元音字母开头
                        for(int i=s;i<t;i++)
                            printf("%c",temp[i]);
                    }
                    printf("ay");
                    s=t;
                }
            }
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    ArcGIS学习记录—union、merge及append的区别
    ArcGIS学习记录—属性表的编辑与修改
    ASP.NET应用程序和ASP.NET网站所共有的文件: App_Browsers 等
    C# 文件夹操作
    远程重启服务器
    SQL省市区三级表结构
    c#提出中文首字母
    javascript遍历Json对象个数
    原生javascript添加引用js文件
    简单的div蒙层
  • 原文地址:https://www.cnblogs.com/gu-qiu/p/14331807.html
Copyright © 2011-2022 走看看