1.题目介绍
Time Limit: 1000 ms
Memory Limit: 256 mb
对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。 在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\t')、回车符('\r')、换行符('\n')。
输入输出格式
输入描述:
输入一行:待处理的字符串(长度小于100)。
输出描述:
可能有多组测试数据,对于每组数据,
输出一行:转换后的字符串。
输入输出样例
输入样例#:
if so, you already have a google account. you can sign in on the right.
输出样例#:
If So, You Already Have A Google Account. You Can Sign In On The Right.
题目来源
北京大学机考题
2.题解
2.1 字符串函数
思路
使用isspace判断空白符,使用标记判断当前是否是一个新单词(每经过一个空白符,默认后面的为一个新开始的单词)
然后使用toupper大写化首字母即可!
代码
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
void capitalizeWords(string& s) {
int n = s.length();
bool inWord = false; // 标记是否在单词中
for (int i = 0; i < n; ++i) {
// 如果当前字符是空白符,说明单词结束
if (isspace(s[i])) {
inWord = false;
} else {
// 如果当前字符不是空白符,且不在单词中,说明新单词开始
if (!inWord) {
inWord = true;
// 如果单词的首字母不是大写字母,则将其转换为大写字母
if (islower(s[i])) {
s[i] = toupper(s[i]);
}
}
}
}
}
int main() {
string input;
getline(cin, input);
capitalizeWords(input);
cout << input << endl;
return 0;
}
标签:单词,inWord,1240,DreamJudge,首字母,大写字母,字符串,空白符
From: https://www.cnblogs.com/trmbh12/p/18241709