首页 > 解决方案 > 试图从标准C中的字符串A中删除字符串B的字符

问题描述

因此,如果A =“a B c D e F g”和B =“ BDF ”,则输出应为“aceg”。

我的想法是逐一检查A的字符是否与B的任何字符相等(A [0] vs B [0]/ B [1]... B [n] 等等)。因此,如果它们不匹配,则增加一个计数器变量。如果计数器小于B的长度,则删除该字符,当计数器等于B的长度时,该字符将移动到另一个字符串中。

我的版本看起来像这样,但不起作用:

void remove_characters(char s[], char r[])
{
    int k, i, j, l = 0;
    char s_copy[20];

    for (i = 0; s[i] != '\0'; i++){
        for (j = 0; r[j] != '\0'; j++)
            if (s[i] != r[j])
                k++;
        if (k = strlen(r)){
            s_copy[l++] = s[i];
            k = 0;
        }
    }
    puts(s_copy);
}

void main()
{
    char s1[20],s2[20];
    printf("Enter the first string: ");
    gets(s1);
    printf("Enter the second string: ");
    gets(s2);
    remove_characters(s1,s2);
}

任何想法问题出在哪里?

标签: cstring

解决方案


任何想法问题出在哪里?

不止一个。

  • UnholySheep 提到if (k = strlen(r));你的意思是==而不是=
  • k使用前未初始化;这是在内部循环之前完成的。
  • s_copy不是空终止的。

这是一个利用标准函数strchr和修改的替代实现s,它的优点是对 的长度没有限制,s并且结果对调用者可用,而不仅仅是打印:

void remove_characters(char s[], char r[])
{
    char *t = s;
    do  if (*s && strchr(r, *s)) continue;
        else *t++ = *s;
      while (*s++);
}

推荐阅读