Problem Description
编写程序,按照下列规则将英文名词由单数变成复数。
规则如下:
(1)以辅音字母加y结尾,则将y改成i,再加es
(2)以s, x, ch, sh结尾,则加es
(3)以元音o结尾,则加es
(4)其他情况直接加s
Input Description
第一行为一个正整数n,表示后面有n行测试数据。
然后有n行,每行为一个英语名词。
Output Description
对每行输入,输出该名词的复数形式。
Sample Input
4
baby
bus
potato
map
Sample Output
babies
buses
potatoes
maps
可疑答案:
1.
#include <stdio.h>
#include<string.h>
int main(void)
{
int n;
char word[100];
scanf("%d",&n);
getchar();
int i;
while(n!=0)
{
gets(word);
int k=strlen(word);
if(word[k - 1]=='y')
{
word[k - 1] = 'i';
strcat(word,"es");
}
else if(word[k-1]=='s'||word[k-1]=='x')
strcat(word,"es");
else if(word[k-2]=='s'&&word[k-1]=='h')
strcat(word, "es");
else if(word[k-2]=='c'&&word[k-1]=='h')
strcat(word,"es");
else if(word[k-1]=='o')
strcat(word,"es");
else
strcat(word,"s");
puts(word);
n--;
}
return 0;
}
2.
#include <stdio.h>
#include <string.h>
char dianfushu(char a[][20], int n);
int main()
{
int n;
scanf("%d", &n);
char a[n][20];
for(int j = 0; j < n; j++)
scanf("%s", &a[j]);
dianfushu(a, n);
return 0;
}
char dianfushu(char a[][20], int n)
{
for(int i = 0; i < n; i++)
{
int len;
len = strlen(a[i]);
if(a[i][len - 1] == 'y' && (a[i][len - 1] != 'a' ||
a[i][len - 1] != 'e' ||
a[i][len - 1] != 'i' ||
a[i][len - 1] != 'o' ||
a[i][len - 1] != 'u'))
{
a[i][len - 1] = 'i';
printf("%ses\n", a[i]);
}
else if(a[i][len - 1] == 's' || a[i][len - 1] == 'x')
printf("%ses\n", a[i]);
else if(a[i][len - 2] == 's' && a[i][len - 1] == 'h')
printf("%ses\n", a[i]);
else if(a[i][len - 2] == 'c' && a[i][len - 1] == 'h')
printf("%ses\n", a[i]);
else if(a[i][len - 1] == 'o')
printf("%ses\n", a[i]);
else
printf("%ss\n", a[i]);
}
}
完整答案:
#include <stdio.h>
#include <string.h>
char dianfushu(char a[][20], int n);
int main()
{
int n;
scanf("%d", &n);
char a[n][20];
for(int j = 0; j < n; j++)
scanf("%s", &a[j]);
dianfushu(a, n);
return 0;
}
char dianfushu(char a[][20], int n)
{
for(int i = 0; i < n; i++)
{
int len;
len = strlen(a[i]);
if(a[i][len - 1] == 'y')
{
int k = 1;
if(a[i][len - 2] == 'a')
k = 0;
else if(a[i][len - 2] == 'e')
k = 0;
else if(a[i][len - 2] == 'i')
k = 0;
else if(a[i][len - 2] == 'o')
k = 0;
else if(a[i][len - 2] == 'u')
k = 0;
if(k == 1)
{
a[i][len - 1] = 'i';
printf("%ses\n", a[i]);
}
else
printf("%ss\n", a[i]);
}
else if(a[i][len - 1] == 's' || a[i][len - 1] == 'x')
printf("%ses\n", a[i]);
else if(a[i][len - 2] == 's' && a[i][len - 1] == 'h')
printf("%ses\n", a[i]);
else if(a[i][len - 2] == 'c' && a[i][len - 1] == 'h')
printf("%ses\n", a[i]);
else if(a[i][len - 1] == 'o')
printf("%ses\n", a[i]);
else
printf("%ss\n", a[i]);
}
}
完整答案:
#include <stdio.h>
#include <string.h>
char dianfushu(char a[][20], int n);
int main()
{
int n;
scanf("%d", &n);
char a[n][20];
for(int j = 0; j < n; j++)
scanf("%s", &a[j]);
dianfushu(a, n);
return 0;
}
char dianfushu(char a[][20], int n)
{
for(int i = 0; i < n; i++)
{
int len;
len = strlen(a[i]);
if(a[i][len - 1] == 'y')
{
int k = 1;
if(a[i][len - 2] == 'a')
k = 0;
else if(a[i][len - 2] == 'e')
k = 0;
else if(a[i][len - 2] == 'i')
k = 0;
else if(a[i][len - 2] == 'o')
k = 0;
else if(a[i][len - 2] == 'u')
k = 0;
if(k == 1)
{
a[i][len - 1] = 'i';
printf("%ses\n", a[i]);
}
else
printf("%ss\n", a[i]);
}
else if(a[i][len - 1] == 's' || a[i][len - 1] == 'x')
printf("%ses\n", a[i]);
else if(a[i][len - 2] == 's' && a[i][len - 1] == 'h')
printf("%ses\n", a[i]);
else if(a[i][len - 2] == 'c' && a[i][len - 1] == 'h')
printf("%ses\n", a[i]);
else if(a[i][len - 1] == 'o')
printf("%ses\n", a[i]);
else
printf("%ss\n", a[i]);
}
}