Day12 2023/03/11
难度:简单
题目
编写一个程序实现将字符串中的所有"you"替换成"we"
- 输入:包含多行数据每行数据是一个字符串,长度不超过1000,数据以EOF结束
- 输出:对于输入的每一行,输出替换后的字符串
示例1
输入:you love it!
输出:we love it!
说明:将you替换为了we
运行实例
思路
其实大多数人第一反应就是如何将字符串中的you替换成we,可能通过某些自带的函数方法,或者其他的各种方式,但其实不需要真正的改变字符串,我们要的其实就是一个打印效果,所以我们不妨换个角度,紧扣打印效果这个点去思考!我们为什么不能在遇到you的时候不打印它,改为打印we呢?(😏!!!)
具体实现:
- 通过一个for循环,遍历一组字符串。
- 通过一个if判断来实现将打印you,改为打印we。
- 通过更新循环变量来实现,跳过you.
关键点
- 循环结束后这句代码,cout << endl;(实现换行),目的是为了避免手动换行导致在输入缓冲区中生成回车,影响下次循环。
- 这里采用getline函数的不仅可以接收空格,而且每次输入完成后,还会舍弃掉输入流中的回车这样的结束符,减少因结束符导致的一些bug!
算法实现
c++代码实现-字符串替换
#include <iostream>
#include <string>
using namespace std;
// 字符串替换
int main() {
string str = ""; // 每行字符串
while (getline(cin, str) && str.size() <= 1000) { // 测试多行
for (int i = 0; i < str.size(); i++) {
if (str[i] == 'y' && str[i + 1] == 'o' && str[i + 2] == 'u') { // 遇到you打印we
cout << "we";
i += 2;
} else cout << str[i];
}
cout << endl; // 避免手动回车
}
return 0;
}
- 时间复杂度 --- 除去输入数据占用的时间外,仅遍历一组字符串,其中n为字符串长度
- 空间复杂度 --- 仅常数级变量,无额外的辅助空间
总结
解题,有时候要根据题意,做一些 "变通",我们可以接受思维定式,但同时也要能接受新的,更高效的解题方式!!!