解题思路:这里输入字符串中的字符,一般是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 条评论

Sea 4年前 回复TA
int main(int argc, char *argv[]){
	std::string a,b;
	std::cin>>a;
	for(std::string::iterator s = a.begin(); s != a.end(); ++s){
		if(*s=='a' || *s=='e' || *s=='i' || *s=='o' || *s=='u'){
			b+=*s;
		}
	}
	std::cout<<b;
}

几行代码就能解决的,它不香吗?
左嘉 4年前 回复TA
@得劲 数组的空间为20太小了
左嘉 4年前 回复TA
@cjlu123 第6行:“i!=”改为“ch1[i]!=”
左嘉 4年前 回复TA
@cjlu123 第6行:for(i=0,j=0;i!=&#039;&#039;;i++) 改为for(i=0,j=0;ch1[i]!=&#039;&#039;;i++)
cjlu123 4年前 回复TA
#include <stdio.h>
 
void trans(char ch1[],char ch2[])
{
	int i,j;
	for(i=0,j=0;i!='\0';i++)
	{
		if((ch1[i]=='a')||(ch1[i]=='e')||(ch1[i]=='i')||(ch1[i]=='o')||(ch1[i]=='u'))
		{
			ch2[j]=ch1[i];
			j++;
		}
		ch2[j]='\0';
	}


}
int main()
{
	void cpy(char ch1[],char ch2[]);
	char ch1[100],ch2[100];
	gets(ch1); 
	trans(ch1,ch2);
	printf("%s",ch2);
	return 0;
}

有同学知道吗??我这个为什么输出是乱码??????????
unomti 4年前 回复TA
@酥北 #include<stdio.h> #include<string.h> int main() { 	char a[100],b[100],s; 	int n=0,m=0; 	s=getchar(); 	while(s!=&#039;
&#039;) 	{    a[n]=s; 	if(a[n]==&#039;a&#039;||a[n]==&#039;e&#039;||a[n]==&#039;i&#039;||a[n]==&#039;o&#039;||a[n]==&#039;u&#039;)         {	b[m++]=a[n];} 	s=getchar(); 		n++;	}     int i; 	for( i=0;i<m;i++) 	{ 		printf("%c",b[i]); 	} 	return 0; }
unomti 4年前 回复TA
@酥北 在我编译器是通过不了你的,按照你原版的我删了点东西,可以运行了,不过提交了,运行超限,你自己再改改吧。hah
unomti 4年前 回复TA
@酥北 你为啥写这多头文件?懵逼
得劲 4年前 回复TA
为社么错误50%?

#include <stdio.h>
int str(char a[20],char b[20])
{
	int i,j;
	for(i=0,j=0;i<20;i++)
	{
		if(a[i]=='a' || a[i]=='e' || a[i]=='i' || a[i]=='o' || a[i]=='u')
	    {
    		b[j]=a[i];
    		j++;
    	}
	if(a[i]=='\0')break;
	}
}
int main(int argc, char *argv[])
{
	char a[20],b[20]={0};
	scanf("%s",a);
	str(a,b);
	printf("%s",b);
	return 0;
}
酥北 4年前 回复TA
#include<iostream>
#include"stdio.h"
#include<cstdio>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;

int main()
{
	char a[100],b[100],s;
	int n=0,m=0;
	s=getchar();
	while(s!='\n')
	{    a[n]=s;
	if(a[n]=='a'||a[n]=='e'||a[n]=='i'||a[n]=='o'||a[n]=='u')
    	{	b[m++]=a[n];}
	s=getchar();
		n++;	}
	for(int i=0;i<m;i++)
	{
		printf("%c",b[i]);
	}
	return 0;
}

为什么dev可以,这里提示运行错误啊