问题描述:
将输入的字符串(字符串仅包含小写字母‘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"
将输入的字符串(字符串仅包含小写字母‘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;
}
}
}
}