📅  最后修改于: 2023-12-03 15:07:34.974000             🧑  作者: Mango
本题是 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)。