本題要求你計算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;
}