特殊的翻译

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

输入格式

输入一串由小写字母构成的字符串。(字符串长度不大于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类的用法,还是收获良多的。

string类运用:特殊的翻译的更多相关文章

  1. java里String类为何被设计为final

    前些天面试遇到一个非常难的关于String的问题,"String为何被设计为不可变的"?类似的问题也有"String为何被设计为final?"个人认为还是前面一 ...

  2. JAVA中的String类(详解)

    Java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类.String是一个类不属于基本数据类型. 可以从源码中看到,String是一个final类型. String ...

  3. 逐步解读String类(一)

    一句题外话 面试刚入行的Java新手,侧重基础知识:面试有多年工作经验的老鸟,多侧重对具体问题的解决策略. 从一类面试题说起 考察刚入行菜鸟对基础知识的掌握程度,面试官提出关于String类的内容挺常 ...

  4. java问题解读,String类为什么是final的

    一.理解final 望文生义,final意为“最终的,最后的”,我理解为“不能被改变的”,它可以修饰类.变量和方法. 所以我是否可以理解为被它所修饰的类.变量和方法都不能被改变呢?答案是”是“,因为有 ...

  5. String类的特点和使用步骤

    概述 java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例 类 String 中包括用于检查各个字符串的 ...

  6. Java 1.7.0_06中String类内部实现的一些变化【转】

    原文链接: java-performance 翻译: ImportNew.com- 夏千林译文链接: http://www.importnew.com/7656.html ChangeLog: 201 ...

  7. java基础源码 (1)--String类

    这个是String类上面的注释,我用谷歌翻译翻译的,虽然有点语法上的问题,但是大概都可以翻译出来 /** * The {@code String} class represents character ...

  8. 来说说Java中String 类的那些事情

    今天正好学校那边的任务不多,我就打算把Stirng 的有关知识点都总结在一起了,这样有利于知识的系统性,要不然学多了就会越来越杂,最主要的是总会忘记,记忆的时间太短了,通过这种方式,把它归纳在一起,写 ...

  9. 《Java从入门到失业》第四章:类和对象(4.2):String类

    4.2String类 这一节,我们学习第一个类:String类.String翻译成汉语就是“字符串”,是字符的序列.我们知道,在Java中,默认采用Unicode字符集,因此字符串就是Unicode字 ...

随机推荐

  1. 密码学系列之:1Password的加密基础PBKDF2

    目录 简介 PBKDF2和PBKDF1 PBKDF2的工作流程 详解PBKDF2的key生成流程 HMAC密码碰撞 PBKDF2的缺点 总结 简介 1password是一个非常优秀的密码管理软件,有了 ...

  2. 03-Jwt在.netcore中的实现

    1)jwt的加密解密过程 jwt验证的核心就是加密解密的过程,掌握了这个过程,也就掌握了jwt的原理.jwt的三部分中,header和payload是明文的,能够直接读出来,签名Signature部分 ...

  3. Python代码阅读(第8篇):列表元素逻辑判断

    Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的三份代码的功能分别是判断列表中的元素是否都符合给定的条件:判断列表中是否存在符合给定的条件的元素:以及判断列表中 ...

  4. vue组件的生命周期详解

    1.生命周期&生命周期函数 生命周期:指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段. 生命周期函数:由vue框架提供的内置函数,会伴随着组件的生命周期,自动按序执 ...

  5. 数值计算:四阶龙格-库塔法 for 二阶微分方程

    引言 考虑存在以下二阶偏微分方程 \[\begin{align} f_2 \cdot \ddot{X(t)}+f_1 \cdot \dot{X(t)} +f_0 \cdot {X(t)} =F(t) ...

  6. Unity——观察者模式

    观察者模式 一.Demo展示 二.设计思路 我们假设一种情况,在app中修改了头像,在所有显示头像的UI中都需要更改相应的图片,一个个去获取然后调用刷新会非常麻烦: 因此我们需要一个自动响应机制--观 ...

  7. Visual Studio Docker调试端口设置

    一.前言 在Visual Studio 调试程序时,Docker中的容器端口和主机端口映射随机生成,导致每次调试都需要修改前端API接口的地址 二.解决方案 1.修改Docker调试启动参数,找到启动 ...

  8. Mybatis、maven项目中整合log4j (17)

    Mybatis.maven项目总整合log4j java 中Mybatis.maven项目总整合log4j 1.pom增加log4j包引用 2.添加 log4j.properties文件 # java ...

  9. 【UE4】GAMES101 图形学作业4:贝塞尔曲线

    总览 Bézier 曲线是一种用于计算机图形学的参数曲线. 在本次作业中,你需要实现de Casteljau 算法来绘制由4 个控制点表示的Bézier 曲线(当你正确实现该算法时,你可以支持绘制由更 ...

  10. 【UE4 C++】Input 输入事件绑定

    轴映射与动作映射 编辑器设置input+代码实现具体动作 void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInp ...