解题思路:这里输入字符串中的字符,一般是ASCII字符,从0到255,范围不大;采用查表v[256]的方法,例如'a'是元音字母,那么v['a']就设置为非零,if(v['a'])即可找到'a'并存入另一用来输出的字符串。

注意事项:这里的元音字母可以不包括相应的大写字母。

参考代码:

#include<stdio.h>
#include<string.h>
#define N 1000
int main(){
	char *vowel(char *str1,const char *str2);
	char s1[N],s2[N];
	gets(s2);//输入字符串
	puts(vowel(s1,s2));//找到元音字母并输出
	return 0;
}
char *vowel(char *str1,const char *str2){
	int i,j,len;
	char v[256];//ASCII码表
	memset(v,'\0',sizeof(v));//初始化
	v['a']=v['e']=v['i']=v['o']=v['u']=' ';//特殊位置为非零
	len=strlen(str2);
	for(i=0,j=0;i<len;i++)
		if(v[str2[i]])//用str2[i]查表找到元音字母
			str1[j++]=str2[i];//存入另一字符串
	str1[j]='\0';//字符串结尾
	return str1;
}


点赞(12)
 

0.0分

34 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 48 条评论

暴躁 4年前 回复TA
@暴躁 谢了
tw 4年前 回复TA
#include<stdio.h>
#include<string.h>
int main()
{
	char a[100] = "\0",c[100] = "\0";
	int b;
	int j = 0;
	fgets(a,99,stdin);
	b = strlen(a);
	for (int i = 0; i < b; i++)
		if (a[i] == 65 || a[i] == 69 || a[i] == 73 || a[i] == 79 || a[i] == 85 || a[i] == 97 || a[i] == 101 || a[i] == 105 || a[i] == 111 || a[i] == 117)
		{
			c[j] = a[i];
			j++;
		}
	printf("%s",c);
	return 0;
}
不足之处请指教
左嘉 4年前 回复TA
@暴躁 错误出在:“int max,min;”max和min已经被定义成宏,不能再被定义成变量,应删去第8行
懵懵 4年前 回复TA
@C'est la vie 把m++放在if条件允许的后面
暴躁 4年前 回复TA
#include<stdio.h>
#include<string.h>
#define max (c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
#define min (c=='A'||c=='E'||c=='I'||c=='O'||c=='U')
int main()
{
	char a[100],b[100],c='m';
	int max,min;
	int i=0,m,j=0;
	gets(a);
	m=strlen(a);
	for(i=0;i<m;i++)
	{
		c=a[i];
		if(max||min)
			b[j++]=a[i];
	}
	b[j]='\0';
	puts(b);
	return 0;
}
为什么在vc++6.0上可以,在这里就不行啊?

求解答
C'est la vie 5年前 回复TA
不知道为啥这个错%50,有大佬帮忙优化一下么??
#include<iostream>

#include<string.h>
using namespace std;


int main()
{
char  c;
int i,n;
char a[5],b[5];

for (int i=0;i<5;i++)
{

cin>>a[i];
}


for(int j=0,m=0;j<5;j++,m++)
{ 
if(a[j]=='a'||a[j]=='i'||a[j]=='o'||a[j]=='e'||a[j]=='u')
  {
   b[m]=a[j];
  } 
  
}

n=strlen(b);

for(int i=0;i<5;i++)
if(b[i]!=NULL)
cout<<b[i];

 return 0;
}
小刘 5年前 回复TA
@90度微笑 你很厉害(佩服)
墨魍 5年前 回复TA
#include<stdio.h>
#include<stdlib.h>
int tremp(int* arr, int* b);

int main(void)
{
	
	int* arry = malloc(50 * sizeof(int));
	int* b2 = malloc(50 * sizeof(int));
	tremp(arry[49], b2[49]);
	return 0;
}

int tremp(int* arr, int* b)
{
	int m = 0;
	int n = 0;
	while (arr!='/t')
	{
		arr[m] = getchar();
		m++;
	}
	for (int j = 0; j < m; j++)
	{
		if (arr[j] == 'a' || arr[j] == 'e' || arr[j] == 'i' || arr[j] == 'o' || arr[j] == 'u')
		{
			b[n] = arr[j];
			n++;
		}
	}
	for (int i = 0; i < n; i++)
	{
		printf("%d", b[i]);
	}
}

有大佬能告诉我为甚么提示数组越界了吗,应该怎么样进行改动
qzfycy 5年前 回复TA
@小白到大神 顺序
90度微笑 5年前 回复TA
@小白到大神 你这个有问题 用个异或 他就不是按 a  e i o u 排列了