华为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;
  }
}

 

posted @ 2013-09-12 15:35  淡看浮华  阅读(726)  评论(2编辑  收藏  举报