哈尔滨理工大学---沼跃鱼(待整理)
Description |
fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区分大小写)。 |
Input |
输入包括多行。每行是一个字符串,长度不超过200。 一行的末尾与下一行的开头没有关系。 |
Output |
输出包含多行,为输入按照描述中变换的结果。 |
Sample Input |
The Marshtomp has seen it all before. marshTomp is beaten by fjxmlhx! AmarshtompB |
Sample Output |
The fjxmlhx has seen it all before. fjxmlhx is beaten by fjxmlhx! AfjxmlhxB |
Hint |
不存在mar shto mp这种用空格分开的情况。 有可能一个句子中有两个以上“marshtomp”。 |
这道题看起来很简单,并且开始的时候做的也是挺简单的,但是这道题里所使用的库函数和这些库函数的使用方法却是好久都没用,还有关于字符串和字符数组的一些易错点,尘封了好久好久的知识点,开始在考试的时候做这道题的时候走了好多的弯路,先是对不分大小写有点错乱(其实把输入的字符串处理一下,用临时字符串记录变化为小写就好了,这样查找的是变成小写的临时字符串,处理的是输入的字符串);另外,开始的时候不会使用字符串的find()函数,用循环来完成匹配,这样代码就显得超乱,在第二个代码里优化了之后就好多了。
剩下的就很简单了。。。
#include <iostream>
#include <cstdio>
using namespace std;
int main (){char ch[300];string tstr = "marshtomp"while(gets(ch)){string str="",sstr=ch;int j=0; int len=sstr.length();for(int i=0;i<len;i++) if(sstr[i]<='Z'&&sstr[i]>='A')str= str+(char)(sstr[i]-'A'+'a');else str+=sstr[i];int c=0;for(int i=0;i<len;i++,c++){int temp=i;while(str[temp]==tstr[j]&&temp<len&&j<9){temp++,j++;} if(j==9){sstr.replace(c,9,"fjxmlhx");i+=8,c+=6;} j=0;}cout<<sstr<<endl;}return 0;
}
优化后的代码:
#include <iostream
#include <cstdio>
using namespace std;
int main (){char ch[300];string tarstr = "marshtomp";while(gets(ch)){//获取带空格的字符数组 string tempstr="",sstr=ch;int len=sstr.length();for(int i=0;i<len;i++) if(sstr[i]<='Z'&&sstr[i]>='A')tempstr= tempstr+(char)(sstr[i]-'A'+'a');else tempstr+=sstr[i];//tempstr+='\0'; //str会在后面自动添加\0,否则长度会变长了,这里可以看出string不同于字符数组,字符数组的话需要加 //cout<<len<<' '<<tempstr.length()<<endl;int c=0; for(int i=0;i<len;i++,c++){int xx=tempstr.find(tarstr,i);//找出字符串所在的位置 第一个参数为要查找的字符串,第二个为开始查找的起始位置 if(xx!=-1){sstr.replace(xx,9,"fjxmlhx"); //第一个为要替换的起始位置,第二个为要替换的长度,第三个为被替换为的子串 i+=8,c+=6;} }cout<<sstr<<endl;}return 0;
}
这里总结一下这道简单题带给我的收获
从代码的顺序来:
gets() 获取带空格的字符数组
string+=的话就不用再加'\0'了
tempstr.find(tarstr,i); 找出字符串所在的位置 第一个参数为要查找的字符串,第二个为开始查找的起始位置
sstr.replace(xx,9,"fjxmlhx"); 第一个为要替换的起始位置,第二个为要替换的长度,第三个为被替换为的子串
好酸爽。。。
哈尔滨理工大学---沼跃鱼(待整理)相关推荐
- hrbust 2242 沼跃鱼
这个题就是对字符串遍历一下 不要忽视大小写就好 沼跃鱼 Time Limit: 500 MS Memory Limit: 32768 K Total Submit: 507(280 users) To ...
- hihoCoder - 1082 - 然而沼跃鱼早就看穿了一切 (字符串处理!!)
#1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描写叙述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽全 ...
- 沼跃鱼早已看穿了一切 C/C++
沼跃鱼早已看穿了一切 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 593 Solved: 229 [Submit][Status][Web Boa ...
- HihoCoder - 1082 然而沼跃鱼早就看穿了一切
HihoCoder - 1082 #1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的 ...
- 然而沼跃鱼早就看穿了一切
fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼("marshtomp",不区分大小写).为了使句子不缺少成分,统一换成 " ...
- #1082 : 然而沼跃鱼早就看穿了一切
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼("marshtom ...
- hihocode_1082 沼跃鱼
fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼("marshtomp",不区分大小写).为了使句子不缺少成分,统一换成 " ...
- ZSC - 1306: 沼跃鱼早已看穿了一切 - 题解
Time Limit: 1 Sec Memory Limit: 128 MB 题目链接 : http://acm.two.moe:808/JudgeOnline/problem.php?id=130 ...
- 【hihocoder】#1082 : 然而沼跃鱼早就看穿了一切
题目链接:http://hihocoder.com/problemset/problem/1082?sid=791045 题目: fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程 ...
最新文章
- 快速解决mongodb出现id重复问题
- 第九章 Shell信号发送与捕捉
- PayPal宣布退出虚拟货币组织Libra协会
- Java并发—基础操作
- Debian8.3.0下安装Odoo8.0步骤
- Linux unit14
- AnnotationConfigApplicationContext ad has not been refreshed yet 错误
- asp调用数据库汉字显示乱码解决方案
- JSON: jasckson 字段 过滤
- python复制包到其他环境_Python虚拟环境导出包安装到另一台电脑的方法
- Cython应用手记
- IOS学习笔记-UINavgationController
- 最小系统板 STM32入门,呼吸灯实现(STM32F103C6T6)
- 计算机毕业设计基于Android的计算器app设计
- 【Eslint + Prettier + Husky + Commitlint】前端项目代码规范的搭建
- c语言定时器定时1ms程序,STM32 Cubemx 配置定时器定时1mS
- 解决AppBarLayout嵌套WebView滑动冲突的问题
- 面向对象--西餐厅(基础实现)
- 抖音壁纸小程序v1.0.2版本功能,新增达人入住功能
- OpManager 实时网络监控