您的位置:首页 > 其它

将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:

2015-08-18 19:24 453 查看
问题描述:

将输入的字符串(字符串仅包含小写字母‘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"

#include<iostream>
using namespace std;
void add(char *str,int len,char *outstr);
int main()
{
char str[20];
gets(str);
int len=strlen(str);
char outstr[20];
add(str,len,outstr);
cout<<outstr<<endl;
system("pause");
return 0;
}
void add(char *str,int len,char *outstr)
{
int count=0,m=1;
int i=0;
for(i=0;i<len;i++)
{
if(str[i]!=str[i+1])
outstr[count++]=str[i]+1;
else
{
outstr[count++]=str[i]+1;
outstr[count++]=str[i]+2;
i++;//易错,因为重进for循环的时候还会有个i++,相当于i=i+2;
}
}
outstr[count]='\0';
int outlen=strlen(outstr);
while(outlen)
{
if(outstr[outlen-1]>'z')
outstr[outlen-1]=outstr[outlen-1]-26;
outlen--;
}
}


参考答案:

void convert(char *input,char *output)

{

char c='�';

int tag=0;

int len=strlen(input);

for(int i=0;i

{

if(input[i]!=c)//当前字符与前一个字符不相等,则该字符+1

{

output[i]=(input[i]-'a'+1)%26+'a';

c=input[i];

tag=1;

}else

{

if(tag==1)//当前字符与前一个字符相等,且前面只有一个字符相同

{

output[i]=(input[i]-'a'+2)%26+'a';

c='�';

tag=0;

}else//当前字符与前一个字符相等,且前面已有2n个字符相同。则按第一次出现算

{

output[i]=(input[i]-'a'+1)%26+'a';

c=output[i];

tag=1;

}

}

}

}

void convert(char *input,char *output)

{

char c='�';

int tag=0;

int len=strlen(input);

for(int i=0;i

{

if(input[i]!=c)//当前字符与前一个字符不相等,则该字符+1

{

output[i]=(input[i]-'a'+1)%26+'a';

c=input[i];

tag=1;

}else

{

if(tag==1)//当前字符与前一个字符相等,且前面只有一个字符相同

{

output[i]=(input[i]-'a'+2)%26+'a';

c='�';

tag=0;

}else//当前字符与前一个字符相等,且前面已有2n个字符相同。则按第一次出现算

{

output[i]=(input[i]-'a'+1)%26+'a';

c=output[i];

tag=1;

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: