题目描述:
输入一个名词英语单词,按照英语语法规则把单数变成复数。规则如下:
(1) 以辅音字母y结尾,变y为i,再加es;
(2) 以s, x, ch, sh结尾,则加es;
(3) 以元音o结尾,则加es;
(4) 其他情况加上s。
输入:
输入一个字符串,仅含小写字母,长度不超过20。
输出:
输出其对应的复数形式。
样例输入 :
butterfly
样例输出 :
butterflies
问题分析:
简单的分支结构,对应不同的情况进行不同的操作。需要注意的是在字符后面加s或者es时,如果用strcat()函数不需要自己在末尾加\0,如果采用分别改变的方法需要在最后一个字符后面加上\0.
不加\0的后果:
加上\0结果就正常了:
原因在于分别改变时破坏了字符串的结尾,只需要再加上就行了。
代码实现:
#include<stdio.h>
#include<string.h>
int main(){
char danci[21];
int i=0;
scanf("%s",danci);
while(danci[i]!='\0'){
if(danci[i+1]=='\0'){
if(danci[i]=='y'){
danci[i]='i';
strcat(danci,"es");
break;
}else if(danci[i]=='s'||danci[i]=='x'||(danci[i-1]=='c'&&danci[i]=='h')||(danci[i-1]=='s'&&danci[i]=='h')){
strcat(danci,"es");
break;
}else if(danci[i]=='o'){
strcat(danci,"es");
break;
}else{
strcat(danci,"s");
break;
}
}
i++;
}
printf("%s",danci);
return 0;
}
运行结果:
提交结果: