校内模拟赛 C语言 让小明感兴趣的单词(小明对类似于hello这种单词...)

问题描述:

小明对类似于hello这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。(元音字母包括a,e,i,o,u,共五个,其他均为辅音字母。)

输入格式:
       输入一行,包含一个单词,单词中只包含小写英文字母。

输出格式:
       输出答案,或者为yes,或者为no。

样例输入:lanqiao
样例输出:yes

样例输入:world
样例输出:no

思路:根据题意应有四段,先从前往后按顺序找出辅音、元音、辅音、元音四段的开头下标,然后从第四段(元音)开头往后找,如果此后再出现了辅音,那么就no,否则为yes。

代码:

#include<stdio.h>
#include<string.h>
int t;
int fuyin(int t);
int main()
{
	int i,j,k,l;//先把该定义的都定义了 
	int c,d,e;
	char a[100];//单词嘛,所以定义char类型的数组 
	scanf("%s",a);
	int x[100]={0};//定义整型数组,把char数组转为int数组处理,毕竟看int舒服一点 
	for(i=0;i<strlen(a);i++)//利用ASCII码表将a数组元素一个一个得放进x 
	{
		x[i]=(int)a[i];
	}
	/*
	*转换好了是吧,分为四段,
	*依次找出每一段开头 
	*从第四段开头往后找,若出现了辅音,那这单词就no了
	*否则就是yes
	*/ 
	 
	for(i=1;i<strlen(a);i++)//strlen计算字符串长度,要加相应头文件
	{
		if(fuyin(x[0])==0||fuyin(x[strlen(a)-1])==1)//如果第一段元或最后一段辅,直接pass 
		{
			printf("no");
			break;
		}
		else
		{
			if(fuyin(a[i])==0)//上个if判断了第一个字母是辅音,那么下面就找元音 
			{
				c=i;//查找并记录从前往后找到的第一个元音所在下标 
				for(j=c;j<strlen(a);j++)
				{
					if(fuyin(a[j])==1)//从元音部分向后找辅音的 
					{
						d=j;//c和d分别记录向后找到的第二段和第三段的开头 
						for(k=d;k<strlen(a);k++)
						{
							if(fuyin(a[k])==0)//第三段后找元音,也就是第四段开头 
							{
								e=k;
								//如果此时再往后还能找到辅音的话,则错误
								for(l=e;l<strlen(a);l++)
								{
									if(fuyin(a[l])==1)//表示第四段中夹杂辅音 
									{
										printf("no");
										break;
									}	
									if(l==strlen(a)-1)//表示已经到达最后一个元素,这在之前已经判断过 
									{
										printf("yes");
										break;
									}
								} 
								break;  
							}
							 
						} 
						break; 
					}	
					 
				} 
			}
		}
		
	}
	return 0;
}

int fuyin(int t)//判断是否为辅音(别在意这通俗易懂的函数名) 
{
	if(t!=97&&t!=101&&t!=105&&t!=111&&t!=117)//元音字母对应的ASCII码 
	{
		return 1;//辅音返回1 
	}
	else
	{
		return 0;//元音返回0 
	}
}

测试1:
在这里插入图片描述
测试2:
在这里插入图片描述
写在末尾:中间转int数组其实是完全可以去掉的,加上了反而增加运行时间。我再好好练练char数组的使用吧。。。

发布了6 篇原创文章 · 获赞 3 · 访问量 529

猜你喜欢

转载自blog.csdn.net/qq_45556278/article/details/104987261