编程基础——函数调用
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;
}