描述:
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”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; }
拷贝到牛客网测试运行:
成功通过: