题解 | 首字母大写

首字母大写

https://www.nowcoder.com/practice/91f9c70e7b6f4c0ab23744055632467a

#include <stdio.h>
#include <string>
#include <vector>
#include <string.h>
using namespace std;
int main() {
    char str[200];
    bool isblank =
        true; //最开始默认有个空格,为了方便判别是否是单词
    while (fgets(str, 200, stdin) != NULL) {
        if (str[0] == '\n') {
            break;
        }
        // 检查结束标记
        if (strcmp(str, "END") == 0) {
            break;
        }
        string s = str;
        for (int i = 0; i < s.size() ; i++) {
            if (s[i] == '\0') {
                break;
            } else if (s[i] == ' ' || s[i] == '\t' || s[i] == '\r' || s[i] == '\n') {
                isblank = true; //是空格
            } else { //当前字符是字母
                if (isblank && s[i] >= 'a' &&
                        s[i] <= 'z') { //并且前一个字符是空格可以判断此字符为某个单词的首个字符
                    s[i] -= 32; //小写转大写字母需要在当前的基础上-32即’97‘-32=‘65’
                    isblank = false; //将当前字符更新为前一个字符(且不为空格)i++会自动走到下一个字符
                } else {
                    isblank = false; //如果不是a-z的字符说明不是字母如9,此时前一个字符更新为不为空格(后面的字母不会变大写!)
                }
            }
        }
        printf("%s\n", s.c_str());
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务