容易发现音节的划分不仅要求子串形如 \(\texttt{CV}\) 或 \(\texttt{CVC}\),并且接下来的两个字符也必须是 \(\texttt{CV}\),不然会导致无法划分下去。
于是我们遍历字符串,找出所有满足上述条件的子串,记录需要输出 \(\texttt{.}\) 的位置即可。
实现:
int n; string s,ans,t="";
cin>>n>>s,ans=s,memset(x,-1,sizeof(x)),tot=0; //x是记录需要输出.的位置的数组
for(int i=0;i<s.size();i++){
if(s[i]=='a'||s[i]=='e') s[i]='V';
else s[i]='C';
}
for(int i=0;i<s.size();i++){
t+=s[i];
if((t=="CV"||t=="CVC")&&(s[i+1]=='C'&&s[i+2]=='V')) x[++tot]=i,t="";
}
for(int i=0,j=1;i<ans.size();i++){
cout<<ans[i];
if(i==x[j]) cout<<'.',j++;
}
cout<<'\n';