本题是个简单字符串处理题,题意是判断给的字符串是否符合要求,要求有3个:
1, 必须含有元音;
2, 不能有3个连续是元音或辅音;(不是连续字母)
3, 不能有相邻相同的,但oo,ee可以;
参考了一下别人的方法,加上自己的理解!!
思路:由条件入手,首先必须判断出该字符串中元音字母,根据所需,就应该定义两个数组,来保存条件2,3。当代码中的yuan[i]=1,并且保证有连续三个字母的则不符合条件,当代码中b[i]=1是则就是满足条件1,2,3.则输出,,,
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
int yuan[36];
int i,b[6],len;
char str[1001];
memset(yuan,0,sizeof(yuan));
yuan[1]=1;yuan[5]=1;yuan[9]=1;yuan[15]=1;
yuan[21]=1;//标记元音字母,以便计算。
while(cin>>str&&strcmp(str,"end"))
{
b[0]=0;//三个条件依次先赋初值。
b[1]=1;b[2]=1;
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]=='a'||str[i]=='e'||str[i]=='i'||str[i]=='o'||str[i]=='u')
b[0]=1;//条件1:是否含有元音字母?
if(str[i]==str[i+1]&&str[i]!='e'&&str[i]!='o')
{
b[1]=0;//条件2:是否有相同的字母为邻?
break;
}
}
for(i=0;i<len;i++)
{
if(yuan[str[i]-96]==yuan[str[i+1]-96]&&yuan[str[i]-96]==yuan[str[i+2]-96])
{
b[2]=0;break;//条件3:是否有连续三个元音在一起?
}
}
if(b[2]&&b[1]&&b[0])//当三个条件同时满足时,输出,,
printf("<%s> is acceptable.\n",str);
else
printf("<%s> is not acceptable.\n",str);
}
return 0;
}