题目描述:编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
难度:水
int find(char ch) {
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
return 1;
}
if (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') {
return 1;
}
return 0;
}
char* reverseVowels(char* s) {
int len = -1;
for (int i = 0; s[i]; i++) {
if (find(s[i]) == 1) len += 1;
}
char *arr = (char *)calloc(len + 5, sizeof(char));
int cnt = 0;
int i = 0;
for (; s[i]; i++) {
if (find(s[i]) == 1) arr[cnt++] = s[i];
}
int j = 0;
while (i >= 0 && cnt >= j) {
if (find(s[i]) == 1) {
s[i] = arr[j++];
}
i -= 1;
}
// printf("%d\n", i);
free(arr);
return s;
}
在申请arr临时字符串的大小上有两种考虑:
1.直接申请s串的大小,空间开的多,消耗内存多,但是会变快
2.遍历一下s串,先查看有多少元音字母,再申请,这样要多遍历一遍s串,运行时间增加