📌  相关文章
📜  国际空间研究组织 | ISRO CS 2017 – 5 月 |问题 78(1)

📅  最后修改于: 2023-12-03 15:07:34.974000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2017 – 5 月 | 问题 78

本题是 ISRO CS 2017 五月考试的一道编程题,考查的是字符串操作。

题目描述

给定一个字符串,要求将其中的每个单词首字母大写,并将其余字母全部小写。单词之间用空格分隔。例如,将 "i LoVe ProGrAmMiNg" 转换为 "I Love Programming"。

输入格式

输入只包含一个字符串,长度小于或等于 10^4。

输出格式

输出转换后的字符串。

样例输入
i LoVe ProGrAmMiNg
样例输出
I Love Programming
解题思路

可以通过 split() 方法将字符串按空格分割成单词,并分别将每个单词进行首字母大写、其余小写操作后再用 join() 方法拼接起来。

需要注意的是,可能会出现多个空格或者空格在字符串开头或结尾的情况,需要先对字符串进行 trim() 操作去除多余空格。

参考代码
def capitalize_words(s: str) -> str:
    return ' '.join(word.capitalize() for word in s.strip().split())
#include <iostream>
#include <algorithm> // 使用 transform() 等 STL 算法需要加上此头文件
using namespace std;

int main() {
    string s;
    getline(cin, s); // 使用 getline() 方法获得带空格的一行输入
    transform(s.begin(), s.end(), s.begin(), ::tolower); // 将字符串中所有字母转为小写
    s[0] = toupper(s[0]); // 将字符串首字母转为大写
    for (int i = 0; i < s.size() - 1; i++) {
        if (s[i] == ' ') s[i + 1] = toupper(s[i + 1]); // 将每个单词首字母转为大写
    }
    cout << s << endl;
    return 0;
}
复杂度分析

以上两种实现方法时间复杂度均为 O(n),其中 n 为字符串长度,空间复杂度均为 O(n)。