【牛客网】OR63 删除公共字符串

一.题目描述

牛客网题目链接:删除公共字符_牛客题霸_牛客网

描述:

输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”

输入描述:

每个测试输入包含2个字符串.

输出描述:

输出删除后的字符串.

示例1:

输入:They are students.
aeiou

输出:Thy r stdnts.

题目详情:


二.题目思路

思路一:

首先,我们创建一个指针(*str),然后用该指针遍历检查整个arr1数组.

如果检查出该指针指向的字符属于arr2,则将*str后的字符逐一向前提一个字节.

如果检查出该指针指向的字符不属于arr2,则不进行任何操作,检查下一个字符.

直到遍历检查完arr1中的最后一个字符再将arr1打印出来即可.

思路图解如下:


 思路二:

首先,对于在线oj题目,我们可以只专注于结果,即只要最后打印出的结果符合题目要求即可.

因此,我们可以先逐一打印第一个字符串中的内容.

然后,在打印的过程中判断该字符是否属于第二个字符串,

如果该字符属于第二个字符串,则不打印该字符,如果该字符不属于第二个字符串,则打印该字符.

思路图解如下:


三.解题代码

思路一完整解题代码:

根据上述思路,本题解题代码如下:

#include <stdio.h>
#include <string.h>
void move(char*str)
{
    char*mov=str;
    while(*(mov)!='\0')
    {
        *mov=*(mov+1);//这步结束后,str指针中存储的将会是原本它后面的那个字符,因此move后str就不用再++了
        mov++;
    }
}

int main()
{
    char arr1[1000]={0};
    char arr2[1000]={0};
    gets(arr1);
    gets(arr2);
    char *str=arr1;
    char *arr1init=arr1;
    while(*str!='\0')
    {
        //判断是否为arr2字符
        if(strchr(arr2,*str)!=NULL)
        {
            //*str后所有字符前移
            move(str);
        }
        else
        //str后移
        str++;
    }
    while(*arr1init!='\0')
    {
        printf("%c",*arr1init);
        arr1init++;
    }
    return 0;
}

拷贝到牛客网测试运行:

成功通过:


思路二完整解题代码:

根据上述思路,本题解题代码如下:

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

int main() {
    char arr1[100]={0};
    char arr2[100]={0};
    gets(arr1);
    gets(arr2);
    int i=0;
    int len=strlen(arr1);
    for(i=0;i<len;i++)
    {
        if(strchr(arr2, arr1[i])==NULL)
            printf("%c",arr1[i]);
    }
    return 0;
}

拷贝到牛客网测试运行:

成功通过:


猜你喜欢

转载自blog.csdn.net/weixin_72357342/article/details/132948662