闲话少说,直接上题目:
要求输入两个字符串,从字符串A中把字符串B包含的字母全删掉。
最初的反映出来的就是定义两个循环,外循环为B的长度,内循环为A的长度,进行一个一个的比较,如果相等就用replace()替换。
做完之后提交发现不通过。。。。。超时了,百度了一下发现有个学长的思路不错,值得学习借鉴:定义一个256的数组用于存放ASCII码,B中出现的ASCII记录为1,循环A数组,如果相等就跳过。代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
String s=scan.nextLine();
char []A=s.toCharArray();
String b=scan.nextLine();
char []B=b.toCharArray();
int []r=new int[256];
for(int i=0;i<B.length;i++){
r[B[i]]=1;
}
for(int i=0;i<A.length;i++)
{
if(r[A[i]]==1)
{
continue;
}
System.out.print(A[i]);
}
}
}
兴高采烈的去提交了,嗯恩摁鞥......居然还是过不了,还是超时,还是14分,我的大java真的做不出来嘛,我真是。。。。最后我做了一个决定,用C语言重新做一个试试,还真是过了。
#include<stdio.h>
#include<string.h>
int main()
{
int i=0,j=0;
char A[10010];
char B[10010];
int length;
gets(A);
gets(B);
length = strlen(B);
while(A[i]!='\0')
{
for(j=0;j<length;j++)
{
if(A[i]==B[j])
break;
}
if(j==length)
printf("%c",A[i]);
i++;
}
printf("\n");
return 0;
}
大概解释一下:只需要记录B的长度,拿着A的每一个元素去和B对比,如果相等了就不输出,进行i++,如果找到最后一个还是不相等,那就说明没有找到,j==length,进行输出。
怎么样,简单吧?还是自己能力不足,需要多多学习鸭
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。