题目
给定一个单词,你需要判断单词的大写使用是否正确。我们定义,在以下情况时,单词的大写用法是正确的:
全部字母都是大写,比如"USA"。
单词中所有字母都不是大写,比如"leetcode"。
如果单词不只含有一个字母,只有首字母大写, 比如 “Google”。
否则,我们定义这个单词没有正确使用大写字母。
来源:力扣(LeetCode)
分析
分析题目,要求对输入的非空单词判断其大写使用是否正确。
首先,根据首字母可以将单词分为两大类讨论:首字母大写和首字母小写,用变量temp记录。
1.若首字母是小写字母,则后面的字母都要小写,不能出现大写字母,否则返回false;
2.若首字母是大写字母,则后面的字母要均是大写或均是小写,后面的字母与前一个字母同时为大写/小写,否则不符合规则,返回false。
代码
bool detectCapitalUse(char * word){
int i = 1,temp = 0;
//A= 65, a = 97
if(word[0] >= 97){//若第一个字母是小写,则temp=1
temp = 1;
}
if(temp == 0){//首字母大写
if(word[i] == '\0'){//如果只有一个字母,则直接返回true
return true;
}
i++;
for(; word[i] != '\0'; i++){//判断前一个字母和后一个字母是不是均为小写字母/大写字母
if((word[i] >= 97 && word[i-1] < 97) || (word[i] < 97 && word[i-1] >= 97)){
return false;
}
}
}else{//首字母小写
for(; word[i] != '\0'; i++){
if(word[i] < 97){//出现大写字母则返回false
return false;
}
}
}
return true;
}