标签:char 交换 cin ios lse using str 大于 cstring
小明的工作是对一串英语字符进行特殊的翻译:
当出现连续且相同的小写字母时,须替换成该
字母的大写形式,在大写字母的后面紧跟该小
写字母此次连续出现的个数;与此同时,把连
续的小写字母串的左侧和右侧的字符串交换位
置;重复该操作,直至没有出现连续相同的小
写字母为止。现在小明想请你帮他完成这种特
殊的翻译。
输入一串由小写字母构成的字符串。(字符串
长度不大于250)
样例一输入:dilhhhhope
样例一输出:opeH4dil
样例二输入:lodnkmgggggggoplerre
样例二输出:eG7lodnkmR2ople
#include<iostream>
#include<cstring>
using namespace std;
struct Word
{
char str[255];
}phrase[300];
int Calculate(int number)
{
int sum__=0;
while(number)
{
sum__++;
number/=10;
}
return sum__;
}
int main()
{
char words[255]={'\0'};
cin >> words;
int start,sum_,final,i,j,sum=0;//sum用于判定
//for(i=0;i<300;i++)
//phrase[i].str={'\0'};
strcpy(phrase[0].str,words);//赋值
int length=strlen(words),how;
char recorder;
while(1)
{
i=0;
sum_=0;
start=0;
final=0;
while(phrase[sum].str[i]!='\0')
{
if(phrase[sum].str[i]==phrase[sum].str[i+1]&&phrase[sum].str[i]>='A')//出现重复字符
{
final=start=i;//初始赋值
recorder=phrase[sum].str[i]-'a'+'A';//记录字符
while(1)
{
if(phrase[sum].str[final]==phrase[sum].str[final+1])final++;
else break;
}
break;//执行交换字符串操作;
}
i++;
}
sum_=final-start;
if(!sum_)break;
else//开始交换字符串;
{
sum_++;//统计数量
j=final+1;
i=0;
while(phrase[sum].str[j]!='\0')//将后面部分赋值给
{
phrase[sum+1].str[i]=phrase[sum].str[j];
i++;j++;
}
phrase[sum+1].str[i]=recorder;
how=Calculate(sum_);//处理数字出现类型
if(how==1)
{
phrase[sum+1].str[i+1]=sum_+'0';//数字大小得分类讨论
i+=2;
}
else if(how==2)
{
phrase[sum+1].str[i+1]=sum_/10%10+'0';
phrase[sum+1].str[i+2]=sum_%10+'0';
i+=3;
}
else
{
phrase[sum+1].str[i+1]=sum_/100%10+'0';
phrase[sum+1].str[i+2]=sum_/10%10+'0';
phrase[sum+1].str[i+3]=sum_%10+'0';
i+=4;
}
j=0;
while(j!=start)
{
phrase[sum+1].str[i]=phrase[sum].str[j];
i++;j++;
}
}
sum++;
}
cout << phrase[sum].str;
return 0;
}
本题题意清晰明了即要求将重复字母转
写字母再加上个数字表示重复的数目;
初次设计时忽略考虑sum_的值仅得到40
此时输入样例为z<repeat 26 times>
就会出现端倪重复字母背后不是数字,
这是由于我才用sum_+‘0‘进行转换形式
由于字符空间限制,就不能直接将9以上
的数字直接转换,所以采用Calculator
进行计算大小;当然本题限制范围250当
超过这个长度就会出现一生之敌运行超
时
<font face="宋体"size=4就觉得这题还挺有趣挺像镜像反转
标签:char 交换 cin ios lse using str 大于 cstring
原文地址:https://www.cnblogs.com/pekkasuper/p/12507950.html