1 条题解

  • 0
    @ 2026-10-26 10:13:15

    思路与算法

    第一行可能含空格,用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

    信息

    ID
    1699
    时间
    1000ms
    内存
    64MiB
    难度
    入门
    标签
    递交数
    1
    已通过
    1
    上传者