【问题标题】:C removing multiple letter from stringC从字符串中删除多个字母
【发布时间】:2014-09-29 04:59:53
【问题描述】:

我输入了两个字符串(string1 和 string2)。我需要做的是删除字符串 2 中的所有字母 FROM string1。前任。 string1="abcdefghi",string2="afbdh",输出="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++;
    }
}

【问题讨论】:

  • 你忘了问问题。当您按下标有 的按钮时,您应该提出一个问题。
  • string1中的字母可以重复吗?
  • @learner,我知道,只是在作业的第一部分中,它是从整个字符串中删除一个字符,所以现在面对我这个问题,这就是我必须做的与。
  • 请参阅此链接geeksforgeeks.org/… 以获得您的解决方案。
  • 算法应该是:a) 创建新的空字符串 b) 遍历 'string1' 中的所有字符和 c) 添加到新字符串,除非它们存在于 'string two' 中。

标签: c string pointers while-loop


【解决方案1】:

这里没有指针。

实际上有很多解决方案可以解决这个问题。

我试过的就在这里

        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];
        }

【讨论】:

  • 这看起来不像 C :)
  • 它的 c#,但两者的逻辑相同
  • 不一样,希望你教我怎么string.Length in C
  • 对于该 char 数组,1) 循环遍历每个元素,2) 检查该元素是否为 !='\0',3) 每次迭代都会增加一个变量。
【解决方案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

【讨论】:

  • 你没有完美解决我的问题。但是您的代码让我想到了在“rmstr”函数中调用我的“rmchr”函数,从而得到我想要的正确输出。非常感谢。
【解决方案3】:

另一种方法:

#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;
}

【讨论】:

    【解决方案4】:

    在下面找到代码

    #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的结果字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2022-01-09
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多