L1-059 敲笨钟 (20分)(C++)

L1-059 敲笨钟 (20分)(C++)

题目详情:
在这里插入图片描述
方法一:简单模拟

#include<iostream>
using namespace std;
int main()
{
    int n,len,i,flag1,flag2,m,pos;
    string str;
    cin>>n;
    cin.ignore();//吸收输入整数后的换行符,
    while(n--)
    {
        getline(cin,str);//整行读取
        len=str.size();
        flag1=0;
        flag2=0;
        m=0;
        for(i=0; i<len; i++)
        {
            if(str[i]==',')
            {
                if(str[i-3]=='o'&&str[i-2]=='n'&&str[i-1]=='g')
                    flag1=1;
                break;
            }
        }
        if(str[len-4]=='o'&&str[len-3]=='n'&&str[len-2]=='g')
            flag2=1;
        for(i=len-1; i>=0; i--)
        {
            if(str[i]==' ')
            {
                m++;//倒着数空格的个数
                pos=i;//标记倒数第三个空格的下标
            }
            if(m==3)//倒数3个空格跳出
                break;
        }
        if(flag1==1&&flag2==1)
        {
            for(i=0; i<=pos; i++)
                cout<<str[i];
            cout<<"qiao ben zhong."<<endl;
        }
        else
            cout<<"Skipped"<<endl;
    }
    return 0;
}

运行结果:
在这里插入图片描述
方法二:借助相关函数

#include<iostream>
using namespace std;
int main()
{
    int n,len,i,pos;
    string str;
    cin>>n;
    cin.ignore();
    while(n--)
    {
        getline(cin,str);
        len=str.size();
        pos=str.find(',');
        if(pos>=3&&str.substr(pos-3,3)=="ong"&&str.substr(len-4,3)=="ong")
        {//pos>=3必须加。因为有可能是w, wang jiong,long.这样的句子,如果不加,substr()函数会因为数组越界访问会抛出异常。
            pos=len;
            for(i=1;i<=3;i++)
                pos=str.rfind(' ',pos-1);
            cout<<str.substr(0,pos+1)<<"qiao ben zhong."<<endl;
        }
        else
            cout<<"Skipped"<<endl;
    }
    return 0;
}

运行结果:
在这里插入图片描述
该题除了直接模拟和用相关函数模拟还可以采用正则表达式做,改日我专门梳理一下正则表达式知识再详细做。就上面两种方法来说,其实直接模拟就可以简单解决,但平时练习时,能多练习C++string中的一些函数还是要多练习,不断培养运用现成函数的思想。

相关链接:
C++中的cin.ignore()函数
C++string中substr()截取函数
C++string中find()和rfind()函数
L1-059 敲笨钟 (20分)(Java正则表达式)
L1-064 估值一亿的AI核心代码 (20分)(Java正则表达式)

永远相信美好🎈

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信小海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值