zzulioj1156: 单数变复数

题目描述
输入一个名词英语单词,按照英语语法规则把单数变成复数。规则如下:
(1) 以辅音字母y结尾,变y为i,再加es;
(2) 以s, x, ch, sh结尾,则加es;
(3) 以元音o结尾,则加es;
(4) 其他情况加上s。

输入
输入一个字符串,仅含小写字母,长度不超过20。

输出
输出其对应的复数形式。

样例输入 Copy
butterfly
样例输出 Copy
butterflies

代码一

#include<stdio.h>
#include<string.h>
int main()
{
	int i,len;
	char str[20];
	//输入
	gets(str);
	//求长度
	len=strlen(str);
	
	if(str[len-1]=='y')
	{
		str[len-1]='i';
		printf("%ses\n",str);	
	} 
	else if(str[len-1]=='s'||str[len-1]=='x'||(str[len-1]=='h'&&str[len-2]=='c')||(str[len-1]=='h'&&str[len-2]=='s'))
		printf("%ses\n",str);
	else if(str[len-1]=='o')
		printf("%ses\n",str);
	else
		printf("%ss\n",str);
	return 0;
}

说明
利用if -else if语句判断其字符串最后面一位或者最后面两位为什么字符,然后输出时加上相应的后缀字符

代码二

#include<stdio.h>
#include<string.h>
int main()
{
	int i,len;
	char str[30];
	//输入
	gets(str);
	//求长度
	len=strlen(str);
	
	if(str[len-1]=='y')
	{
		str[len-1]='i';	
		str[len]='e';
		str[len+1]='s';
		str[len+2]='\0';
	} 
	else if(str[len-1]=='s'||str[len-1]=='x'||(str[len-1]=='h'&&str[len-2]=='c')||(str[len-1]=='h'&&str[len-2]=='s'))
	{
		str[len]='e';
		str[len+1]='s';
		str[len+2]='\0';
	}
	else if(str[len-1]=='o')
	{
		str[len]='e';
		str[len+1]='s';
		str[len+2]='\0';
	}
	else
	{
		str[len]='s';
		str[len+1]='\0';
	}
	puts(str);
	return 0;
}

说明
别忘记修改字符后最后一定要加’\0’,只有这样才标志着字符串的结束,可以避免一些不必要的错误

定义字符串数组的几种方法

(1) char str[]=“12345”;或:char str[]={“12345”};
这种方法定义时,系统会自动在字符串的末尾加上字符串结束符,即 ‘\0’,

(2) char str[10]={‘1’,‘2’,‘3’,‘4’,‘5’};
这种方法定义时,当初值长度小于数组长度系统会自动从未初始化的元素开始,将之后的元素赋为\0,如上面的数组str中的元素实际上是:‘1’,‘2’,‘3’,‘4’,‘5’,’\0’,’\0’,’\0’,’\0’,’\0’

(3)char str[]={‘1’,‘2’,‘3’,‘4’,‘5’};
这种方法定义时,系统不会自动在字符串的末尾加上字符串结束符;

此时用sizeof()函数可以正确求出其所占的内存大小;但用strlen()函数不能正确求出其长度,因为strlen是通过\0判断字符串结束的。

所以,采用该方法定义时,一般人为地加上\0,即char str[]={‘1’,‘2’,‘3’,‘4’,‘5’, ‘\0’};

注意
不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理。
如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的

补充:
无论是静态,局部还是全局数组只有在定义时才能初始化,否则必须通过其它方法,比如循环操作或者menset函数实现。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值