DreamJudge-1240-首字母大写

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;
}

posted @ 2024-06-11 11:01  DawnTraveler  阅读(23)  评论(0)    收藏  举报