Online Compiler C

#include <stdio.h> int my_length(char c[]) { int len = 0; int i = 0; while (c[i] != '\0') { len++; i++; } return len; } int is_letter(char a) { char *removeflag = "aeiouyAEIOUY"; while (*removeflag) { if (a == *removeflag) { return 1; } else { return 0; } } } void copy(char *from, char *to) { int size = my_length(from); for (int i = 0; i < size; i++) { to[i] = from[i]; } to[size] = '\0'; } void removeletter(char *a) { int size = my_length(a); char removeresult[1001] = {0}; int r_i = 0; for (int i = 0; i < size; i++) { if (!is_letter(a[i])) { removeresult[r_i] = a[i]; r_i++; } } copy(removeresult, a); return; } int main() { char a[1001]; int i = 0; char b; while (i < 1000 && (b = getchar()) != '\n') { a[i] = b; i++; } a[i] = '\0'; removeletter(a); printf("%s", a); return 0; }
这段代码的目的是从输入的字符串中删除所有元音字母(a, e, i, o, u, y,包括大小写),然后输出处理后的字符串。

代码中有一个关键函数 `is_letter` 存在逻辑错误。这个函数本应判断一个字符是否是元音字母,但它的循环只检查了第一个字符就返回了结果,导致无法正确判断后续的元音字母。

- 在 `is_letter` 函数中,`while` 循环内部使用了 `return 0`,这会导致函数在第一次比较不相等时就立即返回,不会继续检查 `removeflag` 中的其他字符。需要调整逻辑,使得只有在遍历完所有元音字母都没有匹配时才返回0。

- 另外,`is_letter` 函数名容易让人误解为“是否是字母”,建议改为更明确的名字如 `is_vowel`,但这不影响功能,只是可读性问题。