H面试程序(27):字串转换
//1 字串转换//问题描述://将输入的字符串(字符串仅包含小写字母‘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 ,输出的字符串//【返回】 无//40min//示例//输入:char*input="abcd" //输出:char*output="bcde"//输入:char*input="abbbcd" //输出:char*output="bcdcde"#include<stdio.h>#include<assert.h>void convert(char *input,char* output){assert(input);assert(output);while(*input != '\0') //遍历整个字符数组{ if(*input == *(input+1)) //当前字符和下一字符相同的情况 { if(*input =='z') //因为字母‘z’的情况比较特殊,所以单独分开{*output = (*input-25); *(output+1) =(*input - 24);output = output + 2; input = input + 2;}else //{ *output = (*input + 1); *(output+1) = (*input + 2); output = output + 2; input = input + 2;} } else //当前字符和下一字符不相同的情况 {if(*input =='z')//因为字母‘z’的情况比较特殊,所以单独分开{*output++ = (*input-25); input++;}else{ *output++ = (*input + 1); input++;} }} *output = '\0'; //记得在output后加上结束符号}int main( ){ char input[] = "abbbcd"; printf("%s\n",input); char output[100]; convert(input, output); printf("%s\n",output); return 0;}