string类运用:特殊的翻译
特殊的翻译
小明的工作是对一串英语字符进行特殊的翻译:当出现连续且相同的小写字母时,须替换成该字母的大写形式,在大写字母的后面紧跟该小写字母此次连续出现的个数;与此同时,把连续的小写字母串的左侧和右侧的字符串交换位置;重复该操作,直至没有出现连续相同的小写字母为止。现在小明想请你帮他完成这种特殊的翻译。
输入格式
输入一串由小写字母构成的字符串。(字符串长度不大于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类运用:特殊的翻译的更多相关文章
- java里String类为何被设计为final
前些天面试遇到一个非常难的关于String的问题,"String为何被设计为不可变的"?类似的问题也有"String为何被设计为final?"个人认为还是前面一 ...
- JAVA中的String类(详解)
Java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类.String是一个类不属于基本数据类型. 可以从源码中看到,String是一个final类型. String ...
- 逐步解读String类(一)
一句题外话 面试刚入行的Java新手,侧重基础知识:面试有多年工作经验的老鸟,多侧重对具体问题的解决策略. 从一类面试题说起 考察刚入行菜鸟对基础知识的掌握程度,面试官提出关于String类的内容挺常 ...
- java问题解读,String类为什么是final的
一.理解final 望文生义,final意为“最终的,最后的”,我理解为“不能被改变的”,它可以修饰类.变量和方法. 所以我是否可以理解为被它所修饰的类.变量和方法都不能被改变呢?答案是”是“,因为有 ...
- String类的特点和使用步骤
概述 java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例 类 String 中包括用于检查各个字符串的 ...
- Java 1.7.0_06中String类内部实现的一些变化【转】
原文链接: java-performance 翻译: ImportNew.com- 夏千林译文链接: http://www.importnew.com/7656.html ChangeLog: 201 ...
- java基础源码 (1)--String类
这个是String类上面的注释,我用谷歌翻译翻译的,虽然有点语法上的问题,但是大概都可以翻译出来 /** * The {@code String} class represents character ...
- 来说说Java中String 类的那些事情
今天正好学校那边的任务不多,我就打算把Stirng 的有关知识点都总结在一起了,这样有利于知识的系统性,要不然学多了就会越来越杂,最主要的是总会忘记,记忆的时间太短了,通过这种方式,把它归纳在一起,写 ...
- 《Java从入门到失业》第四章:类和对象(4.2):String类
4.2String类 这一节,我们学习第一个类:String类.String翻译成汉语就是“字符串”,是字符的序列.我们知道,在Java中,默认采用Unicode字符集,因此字符串就是Unicode字 ...
随机推荐
- P5325-[模板]Min_25筛
正题 题目链接:https://www.luogu.com.cn/problem/P5325 题目大意 定义一个积性函数满足\(f(p^k)=p^k(p^k-1)\) 求\(\sum_{i=1}^nf ...
- P3793-由乃救爷爷【分块,ST表】
正题 题目链接:https://www.luogu.com.cn/problem/P3793 题目大意 给出\(n\)个数字的一个序列\(m\)次询问区间最大值 保证数据随机 \(1\leq n,m\ ...
- pytest环境准备与入门
前言pytest 是 python2 默认自带的,python3 的版本 pytest 框架独立出来了,需用 pip 安装.以下为 python3.7版本为例 pytest是python的一种单元测试 ...
- asp.net core 中配合响应 html5 的音视频播放流,以及文件下载
一.asp.net core 中配合响应 html5 的音视频播放流,以及文件下载 问题描述: 目前测试了在 Windows(谷歌浏览器).Android(系统浏览器.QQ.微信).iOS 三个系统不 ...
- torch的下载及安装
Pytorch官网:https://pytorch.org/ 安装的时候如果选择在官网上下载安装的话下载会很慢,试过梯子也是很慢,此处提供一种快速安装的方法. 1.由于我是window系统,我选择了国 ...
- Wireshark简单协议的抓包分析
一.实验目的 HTTP.TCP.UDP.ICMP.ARP.IP.FTP.TELNET查询分析 基本掌握查询命令的使用方法 二.实验环境 硬件环境:一台Windows7系统,一台XP系统 软件环境:VM ...
- hexo访问优化之--------gulp压缩
hexo访问优化之--------gulp压缩 hexo生成的博客是静态html页面,当有很多静态资源时,加载速度会非常慢,且github服务器在国外,导致网页加载速度非常差 gulp压缩 gulp是 ...
- Jenkins 进阶篇 - 单元测试覆盖率
我们做项目开发,肯定免不了要写单元测试,不管是 Java 项目.Python 项目.PHP 项目,甚至是 nodejs 项目,都应该要写单元测试,本小节就来介绍单元测试的覆盖率报告输出和展示,在后面的 ...
- [no code][scrum meeting] Beta 5
$( "#cnblogs_post_body" ).catalog() 例会时间:5月18日14:30,主持者:叶开辉 下次例会时间:5月19日11:30,主持者:黎正宇 一.工作 ...
- 2021.8.11考试总结[NOIP模拟36]
T1 Dove玩扑克 考场并查集加树状数组加桶期望$65pts$实际$80pts$,考后多开个数组记哪些数出现过,只扫出现过的数就切了.用$set$维护可以把被删没的数去掉,更快. $code:$ 1 ...