华为机试——1.字串转换


/*
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"
*/
//《分析》
//输入一个字符input[i],则根据要求,
//若第1次出现,则输出字符为(input[i]-'a'+1)%26+'a';
//若连续第2次出现,则输出字符为(input[i]-'a'+2)%26+'a'。

#include <iostream>
using namespace std;

void convert(char *input,char* output)
{
int len = strlen(input);cout << len << endl;
if(len == 0)//输入为空.
return;

char ch;
char temp = input[0];
output[0] = (input[0]-'a'+1)%26+'a';

int cnt = 1;
for(int i = 1;i < len;i++)
{
ch = input[i];
if(temp == input[i])
cnt++;
else
{
cnt = 1;
temp = input[i];
}

if(cnt%2 == 1)//出现1次或连续第奇数次出现.
output[i] = (input[i]-'a'+1)%26+'a';
else if(cnt%2 == 0) //连续第偶数次出现.
output[i] = (input[i]-'a'+2)%26+'a';
}
output[i] = '\0';

cout << "input : " << input << endl;
cout << "output: " << output << endl;
}

int main()
{
char*input1="abcd";
char output1[20];
convert(input1,output1);

char*input2="abbbbcd";
char output2[20];
convert(input2,output2);

char*input3="aaabbbcdefghijklmnopqrstuvwxyzz";
char output3[50];
convert(input3,output3);

return 0;
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com