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

渐入佳境. 3年前 回复TA
#include<stdio.h>
#include<string.h>
void fun(char a[]){
	int l;
	l=strlen(a);
	for(int i=0;i<l;i++){
		if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'){
			printf("%c",a[i]);
		}
	}
}
int main(){
	char a[10000];
	gets(a);
	fun(a);
}
图灵奖提名 3年前 回复TA
@Allen 要是想简洁,直接i<strlen(s)就行了呀
御心 3年前 回复TA
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    char a[100],b[100];
    gets(a);
    int i,j=0;
    for(i=0;i<100;i++){
    	if(a[i]=='a'){
    		b[j]=a[i];
    		j++;
		}else if(a[i]=='e'){
			b[j]=a[i];
			j++;
		}else if(a[i]=='i'){
			b[j]=a[i];
			j++;
	    }else if(a[i]=='o'){
			b[j]=a[i];
			j++;
		}else if(a[i]=='u'){
			b[j]=a[i];
			j++;
		}
	}
	puts(b);
	printf("\0");
    return 0;
}
我在Dev C++上运行是正确的,但是这里提交确显示错误,不知道为啥
Allen 4年前 回复TA
未免太麻烦啦!
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
void f(){
    char dinary[5] ={'a','e','i','o','u'};
    char s[100];
    gets(s);
    int len;
    len =(int) strlen(s);
    for(int i = 0;i<len;i++){
        for(int j = 0;j<5;j++){
            if(s[i]==dinary[j]){
                printf("%c",s[i]);
            }
        }
    }
    
}


int main(){
    f();
    return 0;
}
4年前 回复TA
@踏上星辰 #include <stdio.h> #include <string.h> #define MAX 1024 int main(void) {     char str1[MAX];     char str2[MAX];     int n=0,i;     fgets(str1,MAX,stdin);     for( i=0;i<=MAX;i++)     {         if(str1[i]==&#039;a&#039; ||str1[i]==&#039;e&#039;|| str1[i]==&#039;i&#039;|| str1[i]==&#039;o&#039;||str1[i]==&#039;u&#039; )         {             str2[n++]=str1[i];         } 		if(str1[i]==0) 			break;     } 	n=n-1; 	for(i=0;i<=n;i++) 	{ 		printf("%c",str2[i]); 	}         return 0; }
LALA 4年前 回复TA
@踏上星辰 一样的鸡肋代码
aptitude 4年前 回复TA
@酥北 #include<bits/stdc++.h>多香
踏上星辰 4年前 回复TA
#include <stdio.h>
#include <string.h>

#define MAX 1024

int main(void)
{
    char str1[MAX];
    char str2[MAX];

    fgets(str1,MAX,stdin);

    int number=strlen(str1);
    int n=0;

    for(int i=0;i<=number;i++)
    {
        if(str1[i]=='a' ||str1[i]=='e'|| str1[i]=='i'|| str1[i]=='o'||str1[i]=='u' )
        {
            str2[n++]=str1[i];
        }
    }

    n--;
    puts(str2);

        return 0;
}
我的鸡肋代码
笑咲凌霄 4年前 回复TA
#include<stdio.h>
char input(char* cha,char *chb);
char input(char* cha,char *chb)
{
	int a=0,b=0,c,d,e;
	while(*cha!='\0')
	{a++;
	 cha++;
	}
	cha=cha-a;
	for(c=0;c<a;c++)
	{
	if(*(cha+c)=='a'||*(cha+c)=='e'||*(cha+c)=='i'||*(cha+c)=='o'||*(cha+c)=='u')
	{
		*(chb+b)=*(cha+c);
		b++;
	}
	}
	return 0;
}
int main()
{
	char cha[100];
	char chb[100]={};
	scanf("%s",cha);
	input(cha,chb);
	printf("%s",chb);
	return 0;
	
}
笑咲凌霄 4年前 回复TA
@cjlu123 main函数内的数组还未初始化