牛客网题目链接:删除公共字符_牛客题霸_牛客网
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
每个测试输入包含2个字符串.
输出删除后的字符串.
输入:They are students.
aeiou输出:Thy r stdnts.
首先,我们创建一个指针(*str),然后用该指针遍历检查整个arr1数组.
如果检查出该指针指向的字符属于arr2,则将*str后的字符逐一向前提一个字节.
如果检查出该指针指向的字符不属于arr2,则不进行任何操作,检查下一个字符.
直到遍历检查完arr1中的最后一个字符再将arr1打印出来即可.
思路图解如下:
首先,对于在线oj题目,我们可以只专注于结果,即只要最后打印出的结果符合题目要求即可.
因此,我们可以先逐一打印第一个字符串中的内容.
然后,在打印的过程中判断该字符是否属于第二个字符串,
如果该字符属于第二个字符串,则不打印该字符,如果该字符不属于第二个字符串,则打印该字符.
思路图解如下:
根据上述思路,本题解题代码如下:
#include
#include
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
#include
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
拷贝到牛客网测试运行:
成功通过: