本题要求你计算A-B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A-B。
输入格式:
输入在2行中先后给出字符串A和B。两字符串的长度都不超过10^4^,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。
输出格式:
在一行中打印出A-B的结果字符串。
输入样例:
I love GPLT! It's a fun game!
aeiou
输出样例:
I lv GPLT! It's fn gm!
解题思路一:创建一个新的整形数组C,用B字符串中的字符转换成ASCII码值来标记数组C,接着把A字符串中的对应到C,如果没有被标记,则输出,反之不输出。
#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int main() {
string a,b;
int c[128];
memset(c,0,sizeof(c));//memset函数初始化c字符串
getline(cin,a);//按行读取字符串a,遇到回车转到输入b
getline(cin,b);
int m,n;
m=a.length();
n=b.length();
for(int i=0;i<n;i++)
{
c[(int)b[i]]=1;//把b中的字符转换成ASCII码,在c字符串中标记
}
for(int k=0;k<m;k++)
{
if(c[(int)a[k]]==0)//把a中的字符转换成ASCII,如果字符已经被标记,不输出,反之输出
cout<<a[k];
}
return 0;
}
解题思路二:用getline()输入字符串之后,使用两层for循环来比较,定义一个标记变量,代码如下:
#include<iostream>
using namespace std;
int flag[10001];
int main()
{
string a,b;
char c,d='#';
getline(cin,a);
getline(cin,b);
for(int i=0;i<a.length();i++)
{
c=a[i];
for(int j=0;j<b.length();j++)
{
if(c==b[j])
{
flag[i]=1;
}
}
if(flag[i]==0)
cout<<a[i];
}
return 0;
}