文章

【GESP】C++三级练习 luogu-B2122 单词翻转

GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。

luogu-B2122 单词翻转

题目要求

题目描述

小明同学写单词的时候喜欢反着写,比如 hello 他会写成 olleh。给出小明同学写的一个句子,请你将所有的单词复原。

输入格式

共一行,一个字符串表示句子,单词之间以空格分隔。

输出格式

每个单词一行。

输入输出样例 #1

输入 #1

1
olleh dlrow

输出 #1

1
2
hello
world

说明/提示

句子长度不超过 $100$,仅包含小写字母和空格,不存在多余的空格。


题目分析

解题思路

  1. 读取一整行输入的句子,句子中只包含小写字母和空格
  2. 遍历句子中的每个字符:
    • 遇到字母时,将其加入当前单词
    • 遇到空格时:
      • 将当前单词翻转(将字母顺序颠倒)
      • 输出翻转后的单词
      • 清空当前单词,准备处理下一个单词
  3. 遍历结束后,需要处理最后一个单词:
    • 将最后一个单词翻转
    • 输出翻转后的单词

复杂度分析:

  • 时间复杂度为 $O(n)$,其中n为输入句子的总长度
  • 空间复杂度为 $O(w)$,其中w为单个单词的最大长度


示例代码

方法一:利用stringstream和reverse函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <algorithm>
#include <iostream>
#include <sstream>

int main() {
    // 定义字符串变量存储输入的句子
    std::string str;
    // 读取一整行输入
    std::getline(std::cin, str);
    // 创建字符串流,用于分割单词
    std::stringstream ss(str);
    // 定义字符串变量存储每个单词
    std::string token;
    // 使用getline按空格分割字符串流中的单词
    while (std::getline(ss, token, ' ')) {
        // 将每个单词翻转
        reverse(token.begin(), token.end());
        // 输出翻转后的单词
        std::cout << token << std::endl;
    }
    return 0;
}

方法二:手动便利处理字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <string>
#include <iostream>

int main() {
    // 定义字符串变量存储输入的句子
    std::string str;
    // 读取一整行输入
    std::getline(std::cin, str);
    // 定义字符串变量存储当前处理的单词
    std::string cur_str;
    // 遍历输入的字符串
    for (int i = 0; i < str.length(); i++) {
        // 如果遇到空格,说明一个单词处理完成
        if (str[i] == ' ') {
            // 输出当前已翻转的单词
            std::cout << cur_str << std::endl;
            // 清空当前单词,准备处理下一个
            cur_str = "";
        } else {
            // 将当前字符添加到单词前面,实现翻转效果
            cur_str = str[i] + cur_str;
        }
    }
    // 输出最后一个单词(因为最后一个单词后面没有空格)
    std::cout << cur_str << std::endl;
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

本文由作者按照 CC BY 4.0 进行授权