思路:将“.boygirl”用map字典依次排序存放,然后逐个字符判断与其后一个字符是否是递增,且要区分男生女生的范围。若符合要求时,就不断循环,直至不符合要求;判断是boy还是girl,然后计数。不断如此,直至将整个字符串遍历完毕。
#include<iostream>
#include <map>
using namespace std;
int main(){
string s;
getline(cin,s);
map<char,int>letter_order={{'.',-1},{'b',1},{'o',2},{'y',3},{'g',4},{'i',5},{'r',6},{'l',7}};
int cnt_boy=0,cnt_girl=0;
int i=0;
while(i<=s.size()-1){
if(s[i]=='.'){
i++;
continue;
}
int sign=-1;//标记是boy还是girl,boy为1,girl为0,若为-1,则当前单词只有一个字符存在,专门判断一下
while(1){
if(i!=s.size()-1&&letter_order[s[i]]<letter_order[s[i+1]]&&letter_order[s[i+1]]<=3){
sign=1;
i++;
}else if(i!=s.size()-1&&letter_order[s[i]]<letter_order[s[i+1]]&&letter_order[s[i]]>3){
sign=0;
i++;
}else{
if(sign==-1){
if(letter_order[s[i]]<=3){
cnt_boy++;
}else{
cnt_girl++;
}
i++;
break;
}
if(sign==1){
cnt_boy++;
}
if(sign==0){
cnt_girl++;
}
i++;
break;
}
}
}
cout<<cnt_boy<<endl;
cout<<cnt_girl;
return 0;
}