CF858C

题意

如果一个字符串同时满足:

1、三个或以上个连着的辅音字母

2、这一段连着的辅音字母不是全部一样的

则这个字符串非法

整个程序都用一个循环来模拟,要满足要求要求可以用一个 \(num\) 来统计连续辅音字母的数量,大于等于 \(3\)\(3\) 个辅音字母不一样,输出空格。

另外,我们可以加一个辅音元音判断的程序

int pd(char x){
    for(int i=0; i<5; i++)
        if(x==y[i])//y数组来统计元音
            return 0;//如果是就返回0
    return 1;//辅音返回1
}

上总代码!!!

#include<bits/stdc++.h>
using namespace std;
string s;
int len,num;//len为字符串长度,num来统计连续辅音字母的数量
char y[5]={'a','e','i','o','u'};//y数组来储存元音字母
int pd(char x){//判断是否为辅音字母
    for(int i=0; i<5; i++)//循环枚举看x是否为元音字母
        if(x==y[i])//如果x是元音字母
            return 0;//返回0
    return 1;//返回1代表x为辅音字母
}
int main(){
    getline(cin,s);//输入字符串
    len=s.size();//len存字符串的长度
    num=pd(s[0]);
    /*
    如果返回1则s[0]为辅音字母,辅音字母的数量要+1
    (因为初始为0,函数返回1,num就等于1)
    否则s[0]为元音字母,函数返回0,辅音字母的数量也要为0
    */
    cout<<s[0];//输出第一个字符
    for(int i=1; i<len; i++){//循环模拟
        if(pd(s[i])==0) num=0;//如果s[i]为元音字母,连续辅音字母的数量清空为0
        else{//否则为辅音字母
            ++num;//连续辅音字母数量要“更新”(+1)
            if(num>=3&&!(s[i]==s[i-1]&&s[i-2]==s[i])){//判断是否满足题意
                cout<<' ';//满足要求就输出空格
                num=1;//字符串新开了一段,但开头仍为辅音字母,所以连续辅音字母的数量为1
            }
        }
        cout<<s[i];//原封不动的输出
    }
    return 0;//养成好习惯
}

洛谷讲究学术诚信,请勿复制!

posted @ 2025-01-29 15:21  naroto2022  阅读(8)  评论(1)    收藏  举报