如何使用指针删除字符串中的元音

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。我想知道错误的原因以及解决方法。

Bla*_*aze 6

这里:

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)


Tob*_*iSH 5

检查您的 if 条件。它总是正确的。使用&&代替||。在您的示例中,'e' 不等于 'a',因此条件变为真,并将字符添加到结果字符串中。尝试这个:

if (*p != 'a' && *p != 'e' &&*p != 'i' && *p != 'o' && *p != 'u')