1 条题解
-
1
水题《难度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
- 上传者