1 条题解
-
0
思路与算法
第一行可能含空格,用getline完整读取。第二行读入待替换字符A与新字符B。逐个访问原文中的字符,若与A相等就改成B,否则保持原样。最后一次输出整个字符串,所有原有空格均保留。
正确性说明
每个位置独立处理。原字符等于A时,该位置按要求换成B;不等于A时该位置不应替换而保持不变。循环遍历每个位置且仅一次,所以所有该换的位置都被替换,其余位置不变。字符相等比较区分大小写,满足题目要求。A=B时替换不改变任何字符,也正确。
复杂度
令L为原文长度,读入、遍历和输出总时间O(L),保存字符串需要O(L)空间,遍历额外空间O(1)。初始化两个字符和循环变量O(1)。L不超过200。
易错点
不能用cin直接读取第一行,否则遇空格截断。只替换指定单字符,不是全部小写变大写,也不是整词替换。前后空格、连续空格和标点保留。A=B或原文中没有A时输出原文。
参考代码(C++11)
#include <iostream> #include <string> using namespace std; int main() { string s; getline(cin, s); char a, b; cin >> a >> b; for (char &c : s) if (c == a) c = b; cout << s << '\n'; }
- 1