C从字符串中删除多个字母

时间:2014-09-29 04:59:54

标签: c string pointers while-loop

我输入了两个字符串(string1和string2)。我需要做的是删除string1中字符串2中的所有字母。 EX。 string1 =“abcdefghi”,string2 =“afbdh”,output =“cegi”。现在它只删除一个字母。

我试着循环* str3,但我认为在第一次迭代后,* str2没有回到str3 [0]

void rmstr(char *str2, char *str3)
{
    char *p=str2;

    printf("Old String: %s", str2);

    while(*str2)
    {
       if(*p != *str3)
           *str2++=*p;
       p++;
    }
}

4 个答案:

答案 0 :(得分:3)

没有指针的

就在这里。

实际上,有很多解决方案可以实现。

我试过的就是

        string fStr = "bhardwaj", sStr = "dev";
        char[] tStr = new char[fStr.Length];
        int count = -1, j;

        for (j = 0; j < tStr.Length; j++)
            tStr[j] = ' ';
        for (int i = 0; i < fStr.Length; i++)
        {
            for (j = 0; j < sStr.Length; j++)
                if (fStr[i] == sStr[j]) break;
            if (j == sStr.Length)
                tStr[++count] = fStr[i];
        }

答案 1 :(得分:2)

这里的技巧是使用两个指针,一个用于阅读,一个用于写作:

char *r, *w;

r = w = str1;
while (*r) {
    if (strchr(str3, *r) == NULL) {
      ++w; // advance write pointer
    }
    ++r; // advance read pointer
}
*w = '\0'; // null terminate

或者,使用一个中间字符串,然后将其复制回str2

答案 2 :(得分:0)

另一种方法:

#include<stdio.h>
#include<string.h>

void rmstr(char *str2, char *str3, char *str4)
{
    char *pch=NULL;
    int i=0,j=0;
    printf("Old String1: %s\n", str2);
    printf("Old String2: %s\n", str3);
    for(j=0;j<strlen(str2);j++)
    {
        char tmp[2] = {str2[j], '\0'};
        pch = strstr(str3, tmp);
        if (pch == NULL)
        {
            str4[i] = str2[j];
            i++;
        }

    }
    str4[i]='\0';
}

int main()
{   
    char str1[] = "abcdefghi";
    char str2[] = "afbdh";
    char str3[256];
    rmstr(str1,str2,str3);
    printf("New string is: %s\n",str3);
    return 0;
}

答案 3 :(得分:0)

找到下面的代码

#include <stdio.h>
#include <string.h>
int main ()
{
    char s1[20] = { 0 }, s2[ 20], r[20] = {0}, t[ 26] = { 0};
    int i=0,j=0;

    scanf ("%s",s1);
    scanf ("%s",s2);

    for (i=0; i<strlen (s2); ++i)
    {
        t[s2[i]-'a'] = 1;
    }

    for (i=0; i<strlen (s1); ++i)
    {
        if (!t[s1[i]-'a'])
        {
            r[j]=s1[i];
            j++;
        }
    }

    r[j]='\0';

    printf ("result:%s\n", r);
}

1.找到s2中的字符

2.通过排除s2的字符来计算s1中的结果字符串。