//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 != ' ') //遍历整个字符数组 { 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 = ' '; //记得在output后加上结束符号 } int main( ) { char input[] = "abbbcd"; printf("%s ",input); char output[100]; convert(input, output); printf("%s ",output); return 0; }