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

标签 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;
    }
}

最佳答案

这段代码有很多问题。

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) 返回 0 就像在 #2 中一样,您的 return 声明在错误的位置。当它应该在 while 循环的外部 时,它却在 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;
}

关于c - 如何用其他字符替换字符串中的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4243488/

相关文章:

python - 如何将 uint8_t 从 python 传递到 C?

无法使用 fopen() 打开文件

c - 删除尾随空格的程序不起作用! :(

c - memcpy() 是否使用 realloc()?

c++ - 为什么会出现此错误? void* 不是指向对象类型的指针。

c - 比较有符号和无符号变量时意外的程序输出

c++ - 使用 RStudio 的 R 和 C++

c++ - 是否可以复制 GDI 句柄?

c - 如何从 SCTP 消息中检索(RTO、MTU 和 SRTT)信息?

c - 为什么我的 C 程序在第二次调用函数时崩溃?