PAT高度1050ストリング減算(20)[ハッシュハッシュ]

タイトル

与えられた二つの文字列S1とS2、S = S1 - S2はS1からS2内のすべての文字を取ってのafer残りの文字列になるように定義されます。任意の文字列をS2 -あなたの仕事は、S1を計算するだけです。しかし、速いそれを行うにはそれほど単純ではないかもしれません。
入力仕様:
各入力ファイルは、1つのテストケースが含まれています。それぞれの場合は、両方の文字列のrespectively.The列の長さはこれ以上104すべての文字が表示ASCIIコードとホワイトスペース、および改行文字信号の終わりであることが保証されるよりもS1およびS2を与える2行で構成されていません文字列。
出力仕様:
各テストケースについて、S1プリント-一列にS2を。
サンプル入力:
彼らは学生です。
AEIOU
サンプル出力:
汝器R stdnts。

問題の意味

  1. 入力S1、S2、印刷されたS = S1-S2(すなわち:印刷S1、S2の文字で表示されません)
  2. S1、S2、平均長さ<= 10 ^ 4、すべての文字は、ASCIIテーブル内の文字は、入力された改行の終了を示します

トピック分析

  1. 定義されたint型のASC [256]、記録s2の文字の出現。
  2. ASCは[S1 [I]]> 0は、S2に表示される指示には、印刷されていない場合は、S1を横断

知識ポイント

  1. 配列のすべてのASCIIコードの長さは256に設定することができますマークします
  2. 文字配列を使用して行全体を受け取ります
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;
}


おすすめ

転載: www.cnblogs.com/houzm/p/12238628.html