题目描述:输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符。
例如:输入"They are students.",输入"aeiou",则删除之后的第一个字符串变为"Thy r stdnts."
思路:建立数组,将字符串 2 的字符在数组中标记为 1,定义两个指针指向字符串 1,遍历字符串 1,若当前字符所代表的 ASIIC码在数组中对应的值不为 1,表示该字符不是字符串 2 中出现的字符。
Java实现:
- StringBuilder() ——> 构造一个没有字符的字符串构建器,初始容量为16个字符。
- append(char c) ——> 将
char
参数的字符串表示附加到此序列。该参数附加到此序列的内容,该序列的长度增加 1 。 - public String toString() ——> 返回表示此顺序中的数据的字符串。 新的
String
对象被分配并初始化以包含此对象当前表示的字符序列。 然后返回String
。 此序列的后续更改不影响String
的内容。
public class DeletePattern {
public static String deletePattern(String a,String b){
StringBuilder s = new StringBuilder();//存储结果字符串
char[] b1 = new char[256];
for(int i = 0;i < b.length();i++){
b1[b.charAt(i) ] = 1;
}
for(int i = 0;i < a.length();i++){
if(b1[a.charAt(i)] != 1){
s.append(a.charAt(i));
}
}
return s.toString();
}
public static void main(String[] args) {
String a = "They are students.";
String b = "aeiou";
System.out.println(deletePattern(a,b));
}
}
C语言实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* deletePattern(char *s1, char *s2){
int a[256] = { 0 };
while (*s2 != '\0'){
a[*s2] = 1;
s2++;
}
char *p1 = s1;
char *p2 = s1;
while (*p1 != '\0'){
if (a[*p1] != 1){
*p2 = *p1;
p2++;
}
p1++;
}
*p2 = '\0';
return s1;
}
int main(){
char s1[] = "They are students." ;
char *s2 = "aeiou";
printf("%s\n",deletePattern(s1, s2));
system("pause");
return 0;
}