1 条题解

  • 1
    @ 2025-6-18 22:07:21

    水题

    《难度10》

    为了解决这个问题,我们需要编写一个C++程序,接收用户输入的一个不含空格的字符串,然后将该字符串反转并输出。例如,输入"hello"将输出"olleh"。以下是详细的解决方案:

    方法思路 读取输入:使用cin读取用户输入的字符串(不含空格)。

    反转字符串:

    使用两个指针(索引),一个从字符串开头(left),另一个从字符串末尾(right)开始。

    交换这两个指针指向的字符,然后向中间移动指针,直到它们相遇。

    输出结果:输出反转后的字符串。

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string s;
        cin >> s; // 读取输入的字符串(不含空格)
        int left = 0; // 左指针从字符串开头开始
        int right = s.length() - 1; // 右指针从字符串末尾开始
    
        // 当左指针小于右指针时,交换它们指向的字符
        while (left < right) {
            char temp = s[left]; // 临时存储左指针指向的字符
            s[left] = s[right]; // 将右指针指向的字符放到左指针位置
            s[right] = temp; // 将临时存储的字符放到右指针位置
            left++; // 左指针右移
            right--; // 右指针左移
        }
    
        cout << s << endl; // 输出反转后的字符串
        return 0;
    }
    
    

    代码解释 读取输入:cin >> s;读取用户输入的字符串,由于输入不含空格,cin会读取整个单词。

    初始化指针:

    left指针初始化为0(字符串的第一个字符)。

    right指针初始化为s.length() - 1(字符串的最后一个字符)。

    反转字符串:

    使用while循环,当left < right时,交换两个指针指向的字符。

    每次交换后,left指针向右移动(left++),right指针向左移动(right--),直到两个指针相遇或交叉。

    输出结果:cout << s << endl;输出反转后的字符串。

    这种方法直接在原字符串上进行修改,不需要额外的存储空间,时间复杂度为O(n),其中n是字符串的长度,效率较高且代码简洁。

    信息

    ID
    3230
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    7
    已通过
    4
    上传者