【牛客网】OR63 删除公共字符串
【摘要】 一.题目描述牛客网题目链接:删除公共字符 _ 牛客题霸 _ 牛客网 描述:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”输入描述:每个测试输入包含2个字符串.输出描述:输出删除后的字符串.示例1:输入:They are students.aeiou输...
一.题目描述
描述:
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”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;
}
拷贝到牛客网测试运行:
编辑
成功通过:
编辑
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)