博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10361 - Automatic Poetry
阅读量:6488 次
发布时间:2019-06-23

本文共 2363 字,大约阅读时间需要 7 分钟。

hot3.png

题意:

把读入的字符串 s1<s2>s3<s4>s5 按 <、> 拆分成5段, 然后按 s1s2s3s4s5 输出第一个结果(即去掉 <、>), 把 s4s3s2s5 替换掉第二行中的 ... 输出第二个结果.

思路:

1. 把读入的字符串按 <、> 拆分成5段, 然后按需要组装进行输出.

要点:

1. cin 与 getline 混合用会有问题,cin 不会吃掉空白字符,getline 会吃掉空白字符, 所以 cin 完了应该接一个 cin.ignore(), 保证后面的 getline 能正确读取.
2. 字符串的替换, 应使用 string 中的 , 不要直接用 <algorithm> 中的 , 因为 <algorithm> 中的 replace 不会改变空间大小, 所以如果进行替换的字符串长度不一样, 就会导致异常.
3. 使用 string 的  来提取子字符串.

题目:

代码:

# include 
# include
# include
# include
# include
# include
using namespace std;// 用 string 中的 replace, 不要直接用
中的 replace// cin 与 getline 混合用会有问题,cin 不会吃掉空白字符,getline 会吃掉空白字符// 所以 cin 完了应该接一个 cin.ignore(), 保证后面的 getline 能正确读取// 将 src 中的所有的 oldStr 替换成 newStrstring replaceAll(string src, const string oldStr, const string newStr){ size_t found; int len = oldStr.size(); while( (found = src.find(oldStr)) != string::npos ){ src.replace(found, len, newStr); } return src;}// 将 s1
s3
s5 根据 < 和 > 拆成 5 段 vector
splitTo5(string line1){ vector
vt; size_t left; size_t right; // 这里如果用 iterator 怎么实现? // 第 1 段 left = line1.find("<"); vt.push_back(line1.substr(0, left-1)); // 第 2 段 right = line1.find(">", left); vt.push_back(line1.substr(left+1, right-left-1)); // 第 3 段 left = line1.find("<", right); vt.push_back(line1.substr(right+1, left-right-1)); // 第 4 段 right = line1.find(">", left); vt.push_back(line1.substr(left+1, right-left-1)); // 第 5 段 vt.push_back(line1.substr(right+1)); return vt;}int main(int argc, char const *argv[]){ #ifndef ONLINE_JUDGE freopen ("10361_i.txt", "r", stdin); freopen ("10361_o.txt", "w", stdout); #endif int linePair = 0; cin >> linePair; cin.ignore(); // 必须有这行,否则下面 getline 会读到空行 for(int i=0; i
vt5 = splitTo5(line1); string newThreeDot = vt5[3] + vt5[2] + vt5[1] + vt5[4]; // line1 的 < > 都要去掉 // 这里可以直接输出 vt5[0] + vt5[1] + vt5[2] + vt5[3] + vt5[4] 的, 当时没想到, 算了... line1 = replaceAll(line1, "<", ""); line1 = replaceAll(line1, ">", ""); cout << line1 << endl; // 这样写 replace 是不行的,因为 algorithm 中的 replace 不能改变空间的大小 // replace(line1.begin(), line1.end(), "<", ""); // replace(line1.begin(), line1.end(), ">", ""); line2 = replaceAll(line2, "...", newThreeDot); cout << line2 << endl; } return 0;}

环境:C++ 4.5.3 - GNU C++ Compiler with options: -lm -lcrypt -O2 -pipe -DONLINE_JUDGE

转载于:https://my.oschina.net/zenglingfan/blog/142319

你可能感兴趣的文章
Druid-基本概念
查看>>
[LeetCode] Majority Element
查看>>
Html5实现手机九宫格密码解锁功能
查看>>
scala处理日期
查看>>
ENode 2.0 - 深入分析ENode的内部实现流程和关键地方的幂等设计
查看>>
【日常小记】linux中强大且常用命令:find、grep
查看>>
[Java Plasterer] Java Components 3:Java Enum
查看>>
Ajax
查看>>
Netty框架整体架构及源码知识点
查看>>
【木头小开发】-iOS小小里程总结一二
查看>>
vue-router思维导图
查看>>
JavaScript 发布-订阅模式
查看>>
搬了十次家,总算搬进了自己的家
查看>>
快速了解Python并发编程的工程实现(下)
查看>>
社区团购到底是什么?
查看>>
绥化a货翡翠,拉萨a货翡翠
查看>>
为什么Node约定,回调函数的第一个参数必须是err(如果没有错误该参数就是null)?...
查看>>
这个微型机器人可以在人体内“游泳”
查看>>
Javascrip—拷贝对象(13)
查看>>
[Wrong Answer] Leetcode 805 JavaScript 解决方案 数组的均值分割
查看>>