Vee*_*han 1 c pointers if-statement
我想从字符串中删除元音并打印剩余的元音。但是我的if条件表现不如预期。
#include <stdio.h>
void filter (char *p, char *q)
{
while (*p != '\0')
{
if (*p != 'a' || *p != 'e' || *p != 'i' || *p != 'o' || *p != 'u')
{
*q = *p;
q++;
}
p++;
}
*q = '\0';
}
int main ()
{
char str1[10] = "hello";
char str2[10];
char *p, *q;
p = &str1[0];
q = &str2[0];
filter (p, q);
printf ("%s", str2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期望输出为hll但输出为hello。我想知道错误的原因以及解决方法。
这里:
if (*p != 'a' || *p != 'e' || *p != 'i' || *p != 'o' || *p != 'u')
Run Code Online (Sandbox Code Playgroud)
应该:
if (*p != 'a' && *p != 'e' && *p != 'i' && *p != 'o' && *p != 'u')
Run Code Online (Sandbox Code Playgroud)
附带说明,您可以省略char *p, *q;零件。像这样做:
int main()
{
char str1[10] = "hello";
char str2[10];
filter(str1, str2);
printf("%s", str2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
检查您的 if 条件。它总是正确的。使用&&代替||。在您的示例中,'e' 不等于 'a',因此条件变为真,并将字符添加到结果字符串中。尝试这个:
if (*p != 'a' && *p != 'e' &&*p != 'i' && *p != 'o' && *p != 'u')