要满足三个条件,所以最好一点写成一个函数,这样做就不会像全部代码都在main()函数中写一样,要考虑很多细节。
这三个函数都很简单。(我再也不用划译了,条件二给翻译错了,哎,加强英语吧)
下面是代码:
#include<iostream>
#include<cstdio>
using namespace std;
bool rule_one(string &str);
bool rule_two(string &str);
bool rule_three(string &str);
bool is_vowel(char ch)
{
if(ch=='a' ||ch=='e' || ch=='i'||
ch=='o' ||ch=='u')
return true;
else
return false;
}
int main()
{
string str;
int mark ;
while(cin>>str &&str!="end")
{
mark = 0;
mark = rule_one(str);
if(mark)
{
mark = rule_two(str);
if(mark)
{
mark = rule_three(str);
}
}
if(mark)
cout<<"<"<<str<<">"<<" is acceptable."<<endl;
else
cout<<"<"<<str<<">"<<" is not acceptable."<<endl;
}
}
bool rule_one(string &str)
{
int i;
bool mark = false;
for(i=0;i!=str.size();++i)
{
if( is_vowel(str[i]) )//条件1是保证至少有一个vowel
{
mark = true;
break;
}
}
if(mark)
return true;
else
return false;
}
bool rule_two(string &str)
{
int i;
for(i=0;i+2<str.size();++i)
{
if(is_vowel(str[i]) && is_vowel(str[i+1]) &&is_vowel(str[i+2]) )//判断连续是否元音
{
return false;
}
else if( !is_vowel(str[i]) && !is_vowel(str[i+1]) && !is_vowel(str[i+2]))//判断是否连续辅音
{
return false;
}
}
return true;
}
bool rule_three(string &str)
{
int i;
for(i=0;i+1<str.size();++i)
{
if( str[i]==str[i+1] )//判断是否连续2个相同
{
if(str[i]=='e' ||str[i]=='o')
return true;
else
return false;
}
}
return true;
}