写一个程序,给函数传递两个用指针表示的字符串。该函数应该能够从两个字符串中删除所有元音并将它们连接在一起。输入示例:第一个字符串:"abdef"第二个字符串:"ghijk">
输入图片描述
#include <stdio.h>
void filter (char *p, char *q)
{
while (*p != ' ')
{
if (*p != 'a' || *p != 'e' || *p != 'i' || *p != 'o' || *p != 'u')
{
*q = *p;
q++;
}
p++;
}
*q = ' ';
}
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;
}
输出示例:"bdfghjk">
但是程序从原始字符串复制所有字符。为什么?
您只是使用了错误的逻辑运算符,||
。
如果不是a
就复制*p
或而不是e
等。该表达式将始终为true
。
只有当a
和不存在时,你才需要&&
复制它而不是e
等,所以你需要&&
操作符:
void filter(char *p, char *q) {
while (*p != ' ') {
if (*p != 'a' && *p != 'e' && *p != 'i' && *p != 'o' && *p != 'u') {
*q = *p;
q++;
}
p++;
}
*q = ' ';
}