华为2013校园招聘上机笔试题--字串转换

问题描述:
  将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
  要求实现函数:
  void convert(char *input,char* output)
  【输入】 char *input , 输入的字符串
  【输出】 char *output ,输出的字符串
  【返回】 无
  示例
  输入:char*input="abcd"
  输出:char*output="bcde"
  输入:char*input="abbbcd"

  输出:char*output="bcdcde"

void convert(char *input, char *output)
{
	if (NULL == input || NULL == output)
	{
		return;
	}
	char *temp = output;

	/* 首先转换过去 */
	while (*input)
	{
		if (*input == 'z')
		{
			*temp = 'a';
		}
		else
		{
			*temp = *input + 1;
		}
		temp++;
		input++;
	}
	*temp = '\0';
	int length = strlen(output);

	/* 检查是否有字符连续出现3次,如果有,把中间那个修改过来 */
	if (length >= 3)
	{
		for (int i = 1; i <= length - 2; i++)
		{
			if (output[i] == output[i + 1] && output[i] == output[i - 1])
			{
				output[i] = output[i + 1] + 1;
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值