原题链接:[编程入门]自定义函数之字符提取
解题思路:
在函数内部,定义了一个整型变量`i`并初始化为0。`i`将用于记录在`ch2`数组中插入的位置。
接下来是一个`while`循环,循环条件是`*ch1`指向的字符不是空字符`\0`。在循环体内,使用`switch`语句检查当前字符`*ch1`是否是元音字母。
如果`*ch1`是元音字母(即'a'、'e'、'i'、'o'、'u'中的一个),则将该字符存储到`ch2`数组的当前位置`*(ch2+i)`,然后`i`自增1,表示下一个元音字母要插入到`ch2`数组的下一个位置。
接着,将指针`ch1`向后移动一位,指向下一个字符。
循环结束后,插入结束符号`\0`到`ch2`数组的当前位置`*(ch2+i)`,表示字符数组的结束。
注意事项:
参考代码:
#include <stdio.h> // 包含标准输入输出库的头文件
#include <string.h> // 包含字符串处理函数库的头文件
// 函数声明:从输入字符串 ch1 中筛选出元音字母,并存储在 ch2 中
void refine(char *ch1, char *ch2)
{
int i = 0; // 初始化索引 i
// 遍历字符串 ch1,直到遇到字符串结束符 '\0'
while (*ch1 != '\0')
{
// 使用 switch 语句检查当前字符是否是元音字母
switch (*ch1)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
*(ch2 + i) = *ch1; // 如果是元音字母,则将其存储在 ch2 中
i++; // 增加索引 i,准备存储下一个元音字母
break; // 跳出 switch 语句
}
ch1++; // 移动指针 ch1 到下一个字符
}
*(ch2 + i) = '\0'; // 在 ch2 的末尾添加字符串结束符
return; // 函数返回
}
int main()
{
char ch1[100]; // 声明一个字符数组 ch1,用于存储输入的字符串
char ch2[100]; // 声明一个字符数组 ch2,用于存储筛选后的元音字母
scanf("%s", &ch1); // 从标准输入读取一个字符串并存储在 ch1 中
refine(ch1, ch2); // 调用 refine 函数,将筛选后的结果存储在 ch2 中
printf("%s", ch2); // 打印 ch2 中的结果
return 0; // 返回程序的退出状态码,表示成功运行
}0.0分
15 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include <stdio.h> int main() { char arr[100]; char brr[100]; scanf("%s", arr, sizeof(arr)); int len = strlen(arr); int j = 0; for (int i = 0; i < len; i++) { if (arr[i] == 'a' || arr[i] == 'e' || arr[i] == 'i' || arr[i] == 'o' || arr[i] == 'u') { brr[j] = arr[i]; j++; } } int t = j; for (int i = 1; i < t; i++) { for (int k = 0; k <= t - 2; k++) { if (brr[k] > brr[k + 1]) { int temp = brr[k]; brr[k] = brr[k + 1]; brr[k + 1] = temp; } } } for (int i = 0; i < t; i++) { printf("%c", brr[i]); } return 0; }include<string.h> void FlashBack(char arr1[],char arr2[]) { int i,j,k; int num1=strlen(arr1); char arr3[100]; for(i=0;i<num1;i++) { for(j=0;j<5;j++) { if(arr1[i]==arr2[j]) { arr3[i]=arr1[i]; printf("%c",arr3[i]); } } } } int main() { char arr1[100],arr2[5]={'a','e','i','o','u'}; fgets(arr1, sizeof arr1, stdin); FlashBack(arr1,arr2); return 0; }char* haha(const char arr[],int a) { char* b; int k = 0; int i, j; char arr2[5] = {'a','e','i','o','u'}; static char arr3[100]; for (i= 0; i < 5;i++) { for (j = 0;j < a ; j++) { if (arr[j] == arr2[i]) { arr3[k] = arr[j]; k++; } } } b = &arr3; return b; } int main() { char* b; int a, i; char arr1[100]; scanf("%s,",&arr1); a = strlen(arr1); b = haha(arr1,a); for (i = 0; i < a; i++) { printf("%c",b[i]); } return 0; } 来个大佬看看,答案试了很多次都是对的,但是交上去说答案不对#include <stdio.h> #include <string.h> int f(char a[],char b[]) { int i,j; char x; scanf("%s",a); int len=strlen(a); for(i=0;i<len;i++) { if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u') a[i]=b[i]; } int len1=strlen(b); for(i=0;i<len1;i++) { for(j=i;j<len1;j++) { if(a[i]>a[j]) { x=a[j];a[i]=a[j];x=a[i]; } } } return 0; } int main() { char m[100],n[100]; scanf("%s",m); f(m,n); printf("%s",n); return 0; } 大佬,我这个哪有问题,求指点。