タイトル
与えられた二つの文字列S1とS2、S = S1 - S2はS1からS2内のすべての文字を取ってのafer残りの文字列になるように定義されます。任意の文字列をS2 -あなたの仕事は、S1を計算するだけです。しかし、速いそれを行うにはそれほど単純ではないかもしれません。
入力仕様:
各入力ファイルは、1つのテストケースが含まれています。それぞれの場合は、両方の文字列のrespectively.The列の長さはこれ以上104すべての文字が表示ASCIIコードとホワイトスペース、および改行文字信号の終わりであることが保証されるよりもS1およびS2を与える2行で構成されていません文字列。
出力仕様:
各テストケースについて、S1プリント-一列にS2を。
サンプル入力:
彼らは学生です。
AEIOU
サンプル出力:
汝器R stdnts。
問題の意味
- 入力S1、S2、印刷されたS = S1-S2(すなわち:印刷S1、S2の文字で表示されません)
- S1、S2、平均長さ<= 10 ^ 4、すべての文字は、ASCIIテーブル内の文字は、入力された改行の終了を示します
トピック分析
- 定義されたint型のASC [256]、記録s2の文字の出現。
- ASCは[S1 [I]]> 0は、S2に表示される指示には、印刷されていない場合は、S1を横断
知識ポイント
- 配列のすべてのASCIIコードの長さは256に設定することができますマークします
- 文字配列を使用して行全体を受け取ります
char ca[10001];
cin.getline(ca,10001);//不可以修改为strlen(ca),因为strlen是获取已填充字符长度
コード
コード01(文字列)
#include <iostream>
using namespace std;
int main(int argc, char * argv[]) {
string s1,s2;
getline(cin,s1);
getline(cin,s2);
int asc[256]= {0};
for(int i=0; i<s2.length(); i++) {
asc[s2[i]]++;
}
for(int i=0; i<s1.length(); i++) {
if(asc[s1[i]]>0)continue;
printf("%c",s1[i]);
}
return 0;
}
コード02(char配列)
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[]) {
char s1[10001],s2[10001];
cin.getline(s1,10001);
cin.getline(s2,10001);
int asc[256]= {0};
int len1=strlen(s1),len2=strlen(s2);//如果直接在for条件中写strlen()容易引起超时
for(int i=0; i<len2; i++) asc[s2[i]]++;
for(int i=0; i<len1; i++) {
if(asc[s1[i]]>0)continue;
printf("%c",s1[i]);
}
return 0;
}