题解 | 首字母大写
首字母大写
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;
}