解题思路:
注意事项:
参考代码:
#include <stdio.h>
#include <string.h>
void find_char(char *str, char *result);
int main()
{
char str[200] = {0}, result[201] = {0};
fgets(str, sizeof(str), stdin);
str[strcspn(str,"\n")] = '\0';
find_char(str, result); // 接收动态内存指针
printf("%s\n", result);
return 0;
}
void find_char(char *str, char *result)
{
int i = 0, j = 0;
// 动态分配内存(大小与原字符串相同即可)
while(*(str + i) != '\0')
{
if(*(str + i) == 'a' || *(str + i) == 'e' || *(str + i) == 'i' || *(str + i) == 'o' || *(str + i) == 'u')
{
*(result + j) = *(str + i);
j++;
}
i++;
}
*(result + j) = '\0';
}
//方法2,分配内存法
// #include <stdio.h>
// #include <string.h>
// #include <cstdlib>
// char* find_char(char *str);
// int main()
// {
// char str[200] = {0};
// fgets(str, sizeof(str), stdin);
// str[strcspn(str,"\n")] = '\0';
// char *res = find_char(str); // 接收动态内存指针
// if (res != NULL) {
// printf("%s\n", res); // 输出:eoo
// free(res); // 必须手动释放,否则内存泄漏
// res = NULL; // 避免野指针
// }
// return 0;
// }
// char* find_char(char *str)
// {
// int i = 0, j = 0;
// // 动态分配内存(大小与原字符串相同即可)
// char *str1 = (char*)malloc(strlen(str) + 1); // +1 预留结束符位置
// if (str1 == NULL)
// { // 检查内存分配是否成功
// printf("内存分配失败\n");
// return NULL;
// }
// while(*(str + i) != '\0')
// {
// if(*(str + i) == 'a' || *(str + i) == 'e' || *(str + i) == 'i' || *(str + i) == 'o' || *(str + i) == 'u')
// {
// *(str1 + j) = *(str + i);
// j++;
// }
// i++;
// }
// *(str1 + j) = '\0';
// return str1; // 返回动态内存的地址
// }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复