题目链接

简写单词

题目描述

规定一种简写方式:对于一个由多个单词组成的复合词,只保留每个单词的首字母,并将这些首字母转换为大写后按顺序连接起来,形成一个缩写。

输入描述:

  • 在一行中输入一个复合词,由若干个单词组成。
  • 单词之间由单个空格分隔。
  • 每个单词仅由大小写英文字母组成。

输出描述:

  • 输出一个字符串,即复合词的简写形式。

示例:

  • 输入: International Collegiate Programming Contest
  • 输出: ICPC

解题思路

解决这个问题的核心思路是分割字符串并处理每个部分。这是一个基础且常见的字符串操作任务。

  1. 读取整行输入: 由于输入的复合词中包含空格,我们必须读取完整的一行字符串,而不是一次只读取一个单词。

    • C++ 中使用 getline(cin, line)
    • Java 中使用 scanner.nextLine()
    • Python 中使用 input()
  2. 按空格分割字符串: 将读取到的整行字符串以空格为分隔符,切分成一个由多个单词组成的列表(或数组)。

    • C++ 中可以使用 stringstream 来方便地逐个提取被空格隔开的单词。
    • Java 中有 line.split(" ") 方法。
    • Python 中有 line.split() 方法。
  3. 遍历单词并提取首字母: 循环遍历上一步得到的单词列表。

    • 对于每一个单词,获取其第一个字符(索引为 0 的字符)。
    • 使用语言内置的函数将这个字符转换为大写。
    • 将转换后的大写字母追加到一个结果字符串(或 StringBuilderlist)中。
  4. 输出结果: 遍历完成后,将构建好的结果字符串打印出来即可。

这种方法逻辑清晰,直接地实现了题目的要求。

代码

#include <iostream>
#include <string>
#include <sstream> // for stringstream
#include <cctype>  // for toupper

using namespace std;

int main() {
    // 1. 读取整行输入
    string line;
    getline(cin, line);

    // 2. 使用 stringstream 来分割字符串
    stringstream ss(line);
    string word;
    string result = "";

    // 3. 逐个处理单词
    while (ss >> word) {
        if (!word.empty()) {
            // 提取首字母,转大写,并追加到结果
            result += toupper(word[0]);
        }
    }

    // 4. 输出结果
    cout << result << endl;

    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 1. 读取整行输入
        String line = sc.nextLine();

        // 2. 按空格分割
        String[] words = line.split(" ");

        StringBuilder result = new StringBuilder();

        // 3. 遍历单词数组
        for (String word : words) {
            if (!word.isEmpty()) {
                // 提取首字母,转大写,并追加
                result.append(Character.toUpperCase(word.charAt(0)));
            }
        }

        // 4. 输出结果
        System.out.println(result.toString());
    }
}
# 1. 读取整行输入
line = input()

# 2. 按空格分割成单词列表
words = line.split()

# 3. 使用列表推导式高效处理
# 对每个单词(word),取其首字母(word[0]),转为大写(.upper())
# 最后用 "" 将所有结果连接起来
acronym = "".join([word[0].upper() for word in words])

# 4. 输出结果
print(acronym)

算法及复杂度

  • 算法: 字符串处理、分割。
  • 时间复杂度: ,其中 L 是输入字符串的总长度。分割字符串和遍历单词都需要扫描整个字符串一次。
  • 空间复杂度: split 操作会创建一个存储所有单词的列表或数组,其总大小与输入字符串 L 成正比。这是主要的额外空间开销。