我尝试读取数组中的字符串,如果某个字符不是任何排除的字符int a = ('a'||'e'||'i'||'o'||'u'||'y'||'w'||'h');
,则应将该字符复制到新数组中,然后将其打印出来。
代码读作:
void letter_remover (char b[])
{
int i;
char c[MAX];
int a = ('a'||'e'||'i'||'o'||'u'||'y'||'w'||'h');
for (i = 0; b[i] != '\0'; i++)
{
if (b[i] != a)
{
c[i] = b[i];
}
i++;
}
c[i] = '\0';
printf("New string without forbidden characters: %s\n", c);
}
然而,如果输入的数组是New string without forbidden characters: h
,它只打印hello
。我希望它的输出为ll
(删除了h,e和o)。
答案 0 :(得分:2)
使用此:
if (b[i] != 'a' && b[i] != 'e' && b[i] != 'i' && b[i] != 'o' && b[i] != 'u' && b[i] != 'y' && b[i] != 'w' && b[i] != 'h')
布尔OR运算符只返回0
或1
,它不会创建一个自动测试运算符所有参数的对象。
您还可以使用strchr()
功能搜索字符串中的字符。
char a[] = "aeiouywh";
for (i = 0; b[i] != '\0'; i++)
{
if (!strchr(a, b[i]))
{
c[i] = b[i];
}
i++;
}
c[i] = '\0';
答案 1 :(得分:0)
int a = ('a'||'e'||'i'||'o'||'u'||'y'||'w'||'h');
......与你期望的意义完全不同。当您对所有这些字符进行布尔或OR时,a
变为1.由于b []不包含字符值1,因此不会排除任何字符。另外,如果你测试正确,你的c []将会有空插槽。
您可以使用strcspn()来测试您的字符串是否包含您的禁用字符。例如......
// snip
int i=0, j=0;
char * a = "aeiouywh";
while (b[i])
{
int idx = strcspn(&b[i], a);
if (idx >= 0)
{
if (idx > 0)
strncpy(&c[j], &b[i], idx);
j += idx;
i += idx + 1;
}
}
// etc...
此外,您必须确保c []足够大以包含可能被复制的所有字符。