如何用其他字符替换字符串中的特定字符

not*_*33t 4 c

我正在尝试创建一个程序,将一个字符串作为输入,并用*符号替换所有元音.因此,对于"hello world",star_vowels应返回"h*ll*w*rld".

到目前为止我的代码是:

int star_vowels(char s[]){

    int j;

    j = 0;
    while (s[j] != '0'){
        j++;
        if (s[j] = 'a' || s[j] == 'e' || s[j] == 'i' || s[j] == 'o' || s[j] == 'u'){
            putchar('*');
        } else {
            putchar(j);
        }
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

Sie*_*geX 6

这段代码有很多问题.

1)while (s[j] != '0') 我很确定你想要检查NUL字符,而不是字符常数为零.更改'0''\0'

2)j++ 在查看数组的第0个索引之前,您正在递增j.如果你在s [0]有一个元音,那就错过了.移动j++到while循环的最底部,就在结束括号之前.

3)当您应该使用相等运算符时,s[j] = 'a' 您正在使用赋值运算===.使用赋值运算符是合法的C代码,因此将进行编译.不幸的是它会返回true,你最终会用星号替换你的所有角色

4)putchar(j); 当你真的想要输出s [j](你的角色)时,你试图输出'j'(你的迭代器).

5)return 0 就像在#2中一样,你的return语句位于错误的位置.你应该在while循环中,它应该在它之外.你编写它的方式,while循环只会在你的函数超出范围之前执行第一次迭代.

int star_vowels(char s[]) {

    int j = 0;

    while (s[j] != '\0'){
        if (s[j] == 'a' || s[j] == 'e' || s[j] == 'i' || s[j] == 'o' || s[j] == 'u') {
            putchar('*');
        } else {
            putchar(s[j]);
        }
        j++;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)