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正则表达式)
永远相信美好🎈