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

我正在尝试制作一个程序,将输入一个字符串并用*符号替换所有元音。 所以,对于“你好世界”,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) 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; } 

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

if (s[j] = 'a'

这将永远是真的。 你需要==

你也把j++放得太早 – 你跳过字符是因为你在进入循环后立即增加。

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

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

一种实现方式是:

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

工作示例: http : //codepad.org/dd2w5cuy