特殊的翻译

小明的工作是对一串英语字符进行特殊的翻译:当出现连续且相同的小写字母时,须替换成该字母的大写形式,在大写字母的后面紧跟该小写字母此次连续出现的个数;与此同时,把连续的小写字母串的左侧和右侧的字符串交换位置;重复该操作,直至没有出现连续相同的小写字母为止。现在小明想请你帮他完成这种特殊的翻译。

输入格式

输入一串由小写字母构成的字符串。(字符串长度不大于250)

输出格式

输出翻译后的字符串

输入样例

lodnkmgggggggoplerre

输出样例

eG7lodnkmR2ople

Part1 题目分析

该题是一道字符串运用相关的问题,主要的难点在于如何实现题述的每个操作。

我们可以先来概括一下实现的步骤:

1.在读入的字符串中查找相同且连续的小写字母,并记录个数

2.将连续的小写字母替换成单个对应的大写字母

3.将统计的个数转化成字符型

4.求出相同字符前后子串并交换

5.重复以上步骤直到字符串不再发生变化为止。

由于这里如果运用字符数组来模拟会比较繁琐,所以我采用了C++的sting类型,通过运用其中的成员函数来降低模拟难度。

Part2 代码

(1)重复个数整型转化为字符型



(2)字符串处理



(3)完整代码

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
void sovle(unsigned char *a,int sum){
int m,n,t;
m=sum/100;
n=sum/10%10;
t=sum%10;
if(m!=0){
a[0]=m+48;
a[1]=n+48;
a[2]=t+48;
}
else{
if(n!=0){
a[0]=n+48;
a[1]=t+48;
}
else a[0]=t+48;
}
}
string ans(string s1){
string s2,s3;
unsigned char count[4];int sum;
memset(count,0,sizeof(count));
sum=1;
for(int i=0;i<s1.length()-1;i++){
while(s1[i]==s1[i+1]&&s1[i]>='a'&&s1[i]<='z'){
sum++;
i++;
}
if(sum>1){
s1[i-sum+1]-=32;
s2=s1.substr(0,i-sum+1);
s3=s1.substr(i+1);
s1.replace(i+1,s1.length()-i-1,s2);
sovle(count,sum);
s1.replace(i-sum+2,sum-1,(char *)count);
s1.replace(0,i-sum+1,s3);
}
if(sum>1) return s1;
}
return s1;
}
int main(){
string s1,s2,temp;
cin>>s1;
s2=ans(s1);
while(s1.compare(s2)!=0){
s1=ans(s2);
temp=s1;
s1=s2;
s2=temp;
}
cout<<s1;
}

Part3 总结

  这题在解题过程中还是遇到不少问题,比如在没有限定条件之前,连续的数字也会被错判成连续的字母并处理;还有就是由于处理并调换子串的时候,字符的位置和长度会发生改变,所以字符替换的次序上一不小心就会出错。通过这道题,我学习巩固了C++ string类的相关知识,了解到了更多有关string类的用法,还是收获良多的。

最新文章

  1. 探寻 JavaScript 逻辑运算符(与、或)的真谛
  2. JAVA调用R
  3. [Android]电话拨号器开发
  4. 基于小波变换的数字图像处理(MATLAB源代码)
  5. dijit样式定制(三)Button、RadioButton、CheckBox
  6. 为Windows Azure Web站点添加MIME类型解决文件下载失败的问题
  7. Ubuntu下Apache的安装
  8. 选择哪种方式进行SharePoint的备份
  9. 重构第10天:提取方法(Extract Method)
  10. iOS 内存管理(一)之基础知识介绍
  11. JavaScript,Java,php的区分大小写问题
  12. MVVM架构的一次实践,重写iOS头条客户端
  13. 注解方式实现Spring声明式事务管理
  14. 【转】PYTHON open/文件操作
  15. CF #April Fools Day Contest 2016 E Out of Controls
  16. 【转载】PHP5.3 配置文件php.ini-development和php.ini-production的区别
  17. Python汉诺塔问题
  18. hive -f 传递参数
  19. PostCSS理解与运用
  20. vue 调用第三方接口配置

热门文章

  1. 12种 vo2dto 方法,就 BeanUtils.copyProperties 压测最拉胯!【快双11了,别用错喽】
  2. js 手动实现 promise.all的功能
  3. 洛谷3320 SDOI2015寻宝游戏(set+dfs序)(反向迭代器的注意事项!)
  4. 常用SQL函数大全
  5. centos7谷歌chrome内网部署演示
  6. D:\Software\Keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include\stm32f10x.h(483): error: #5: cannot open source input file &quot;core_cm3.h&quot;: No such file or directory
  7. JavaScript之原型与原型链
  8. 2021北航敏捷软工Beta阶段评分与总结
  9. 好好编程BUAA_SE(组/团队) Scrum Meeting 博客汇总
  10. spring security中动态更新用户的权限