Pig-Latin

编程基础——函数调用

1.2:Pig-Latin

题目:
输入和输出:
• 请您编写一个程序,输入任意数量行的文本,并以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] 不要改变任何字母的大小写。

试题分析:
• 首先要判断输入的是否是字母,如果是字母,则将他储存在一个数组中其中else起到输入不是字母对之前输入的字母的转折运行的作用,已不是字母的情况结束。
• 如果遇到的不是字母,则直接输出。
• 运行过程中如果是首字母是元音字母则运用for循环输出该数组并在数组后面输出ay和以不是字母结尾的字符。
• 如果是辅音字母则运用for循环从第二个字符输出该数组并在数组后面输出ay和首字符以及以不是字母结尾的字符串。

注意点:
while(scanf("%c",&a)) 不输入的情况退出循环
考虑到字符串中可能有空格的情况所以采用输入字符的格式,else处理空格

样例:
Sample Input
This is the input.
Sample Output
hisTay isay hetay inputay.

c

#include <stdio.h>//要考虑空格的情况,采用字符的形式输入// 
int isab(char a){//返回int类型 
	if(a>='A'&&a<='Z') return 1;
	else if(a>='a'&&a<='z') return 1;
	return 0;//字母返回1,非字母返回0 
}
int vowell(char c){
	if(c=='a'||c=='A'||c=='e'||c=='E'||c=='i'||c=='I'||c=='o'||c=='O'||c=='u'||c=='U') return 1;
	return 0;//元音字母返回1,辅音字母返回0 
}
char b[1024],t;
int main () {//运用数组暂时存放字母*** 
	char a;
	int i;
	while(scanf("%c",&a)){//当没有输入的情况是退出循环 
		if(isab(a)==1) b[t++]=a;//输入的是字母存入数组b,最后一个变量c不是字母, 
		else{//else的作用是处理空格 
			if(t==0){
				printf("%c",a);//将首个不是字母的输出紧接着继续执行 
				continue;
			}
			if(vowell(b[0])==1){//如果首个字母是元音字母  for循环输出数组a 
				for(i=0;i<t;++i){
					printf("%c",b[i]);
				}
				printf("ay%c",a);//输出不是字母 
			}
			else{//不是元音 
				for(i=1;i<t;++i){
					printf("%c",b[i]);
				}
				printf("%cay%c",b[0],a);
			}
			t=0;//每进行一次单词的变换,变量t初始化 
		}
	}
	return 0;
}

c++

#include<cstdio> 
#include<cstring> 
using namespace std;// 
const int N = 1e6 + 10; //常量 
char s[N], cnt;
int main() { 
    char c; 
    while(~scanf("%c", &c)) { 
        if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
		    s[cnt++] = c; }
        else { 
		    if(cnt == 0) { 
			    printf("%c", c); 
				continue; }
			if(s[0] == 'a' || s[0] == 'e' || s[0] == 'i' || s[0] == 'o' || s[0] == 'u' || s[0] == 'A' || s[0] == 'E' || s[0] == 'I' || s[0] == 'O' || s[0] == 'U') { 
			    for(int i = 0; i < cnt; i++) { 
			        printf("%c", s[i]); 
				}
				printf("ay%c", c); 
			} 
			else { 
			    for(int i = 1; i < cnt; i++) { 
				    printf("%c", s[i]); 
				}
				printf("%cay%c", s[0], c); 
			}
			cnt = 0; 
		} 
	}
	return 0; 
	}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值