华为2013校园招聘上机笔试题
上机时间两小时,3道题
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 ,输出的字符串
【返回】 无
示例
输入:char*input="abcd"
输出:char*output="bcde"
输入:char*input="abbbcd"
输出:char*output="bcdcde"
C语言代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void convert(char *input,char* output);
int main()
{
char *input="zz";
char *output;
output=(char *)malloc(strlen(input)+1);
convert(input,output);
printf("%s\n",output);
return 0;
}
void convert(char *input,char* output){
char c1,c2;
int i=0,j=0;
c1=input[i++];
c2=input[i++];
while(c1!='\0'&&c2!='\0'){
if(c1!=c2){
output[j++]=(c1-'a'+1)%26+'a';
c1=c2;
c2=input[i++];
}else{
output[j++]=(c1-'a'+1)%26+'a';
output[j++]=(c2-'a'+2)%26+'a';
c1=input[i++];
c2=input[i++];
}
}
if(c1=='\0'){
output[j++]=c1;
}else{
output[j++]=(c1-'a'+1)%26+'a';
output[j++]=c2;
}
}