華為機試——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