17.编写一个程序实现将字符串中的所有'you'替换成'we'
输入:包含多行数据每行数据是一个字符串,长度不超过1000,数据以EOF结束
输出:对于输入的每一行,输出替换后的字符串
示例
输入:you love we
输出:we love love
思路
- 用字符数组存储输入的字符串,并定义字符串长度,为遍历使用。
- 在for循环中遍历每个字符,如果第i个和i+1个和i+2个等于分别等于'y'、'o'、'u',则输出"we",并将下标前进2个单位,继续循环。
- 若不等于you,则直接输出当前字符。
具体实现
#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;
}
运行结果
复杂度
- 时间复杂度O(n)--- 除去输入数据占用的时间外,仅遍历一组字符串,其中n为字符串长度
- 空间复杂度O(1)--- 仅常数级变量,无额外的辅助空间
小结
用VS2022处理字符串的输入输出还是有很多的问题尚未解决。
scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串,请看下面的例子:
getchar(),它就是scanf("%c", c)的替代品,
- gets读入字符数组,且读到换行时结束。
- getline是读string类型字符串,且可以读到你指定的字符结束,例getline(cin,s,'.'); 读到句号结束。