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

C 如何用其他字符替换字符串中的特定字符,c,C,我正在尝试制作一个程序,它将接受一个字符串作为输入,并用*符号替换所有元音。所以,对于“helloworld”,star_元音应该返回“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] == '

我正在尝试制作一个程序,它将接受一个字符串作为输入,并用*符号替换所有元音。所以,对于“helloworld”,star_元音应该返回“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;
    }
}

我认为你的问题将是“一切都是*”,这是因为你的巨人
如果

if(s[j]=“a”

这永远是正确的。您需要
==


此外,您将
j++
放得太早-您会跳过字符,因为您在进入循环时会立即递增。

通过在开始时递增
j
,您将丢失
0
索引(第一个字符)

由于您希望将新数据返回到外部世界(函数范围之外),您可以为函数外部的新数据分配内存,并将该数据的指针传递到此函数,或者只在函数内部分配动态内存—请记住删除它

一个实施方案是:

char *star_vowels(char s[]){
    // let's allocate memory for the new string.
    // its size should be strlen(s) + 1 (the ending char).
    char *final = malloc(strlen(s) + 1); 

    int j = 0;
    while (s[j] != 0){
        if (s[j] == 'a' || s[j] == 'e' || s[j] == 'i' || s[j] == 'o' || s[j] == 'u'){
            final[j] = '*';
        } else {
            final[j] = s[j];
        }
        j++;
    }
    final[j] = 0; // end the string
    return final;
}

工作示例:

此代码有许多地方出错

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
就像第二章一样,您的返回语句位于错误的位置。当它应该在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;
}

那么你的问题到底是什么呢。这是一种很好的方式吗。如果是的话,代码有什么问题,所以我不能运行它来做它需要做的事情。你检查的是零而不是空。“o”和“/0”之间存在差异。问题要求替换字符-每个人都有理由原地思考,尽管你提到了这个问题并举例说明了替代方案是件好事。