我正在尝试编写一个程序,将字符串作为输入并用 * 符号替换所有元音。因此,对于“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/