将字符串复制到新数组中

时间:2015-10-15 20:28:28

标签: c arrays string

我尝试读取数组中的字符串,如果某个字符不是任何排除的字符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)。

2 个答案:

答案 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运算符只返回01,它不会创建一个自动测试运算符所有参数的对象。

您还可以使用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 []足够大以包含可能被复制的所有字符。