問題の説明
インターネット警官としてのあなたの仕事は、機密性の高いキーワードがないかどうかを確認するために電子メールを監視することです。ただし、狡猾な犯罪容疑者の中には、検査を避けるために特定の単語のアルファベット順を変更するものがあります。この調整されたシーケンスのキーワードを見つけるプログラムを作成してください。プログラムには2行の入力があります。1行目はキーワードリスト、2行目はチェックする文です。プログラムの出力は、文にある調整されたキーワードです。(単語はすべて小文字であり、単語間のスペースで区切られており、各行の単語数は無制限です)
入力:
guns minesミサイル
americer ssell snug dan iimsssle ot sit neeemis
出力:
gunsミサイル
考えも良いです:
最初の行に各キーワードを保存してから、各キーワードを並べ替えます。
確認する文の各単語を2行目に保存し、各単語を並べ替えて、上記の並べ替えキーワードと等しいかどうかを判断し、等しい場合は、並べ替えられていない元のキーワードを出力します。
次に、スペースで区切られた文字列の各行を抽出する方法です。
次に、C ++でistringstreamメソッドを学びました。
リファレンスからhttps://blog.csdn.net/jacky_chenjp/article/details/70233212
具体的な使い方は以下の通りです
1 #include <bits / stdc ++。H> 2 using namespace std; 3 int main(){ 4 string str = " aa bb cc dd ee " ; 5 istringstream is(str); // Create istringstream object is 6 // and同時に、bind isとstring str 7 string s; 8 while(is >> s){ // 文字列をstrから文字列sに読み取ります 9 cout << s << endl; 10 } 11 return 0; 12 }
プログラム実行結果
この質問のACコード。https://blog.dotcpp.com/a/66682から複製
1 #include <bits / stdc ++。H> 2 名前空間の使用 std; 3 int main(){ 4 string str1、str2; 5 getline(cin、str1); // キーワードの最初の行を 保存する6 getline(cin、str2 ); // チェックする文を2行目に格納します7 vector < string > s1、s2、s3; 8 // s1はキーワードワードを格納します 9 // s2はソートされたキーワードワードを格納します10 // s3はソートされたキーワードワードを格納します 文中の単語が検査される11。 istringstream技研(0009)、STR2に(STR2); // バインド12である文字列TEMP。 13 while(Str1 >> temp){ 14 s1.push_back(temp); 15 s2.push_back(temp); 16 } 17 while(Str2 >> temp){ 18 s3.push_back(temp); 19 } 20 for(int i = 0 ; i <s3.size(); i ++ ){ 21 // 将vector <string> s3中的每一个stringelements3 [i]排序 22 sort(s3 [i] .begin ()、s3 [i] .end()); 23 } 24 for(int i = 0 ; i <s2.size(); i ++){// s2の各要素をトラバースする 25 sort(s2 [i] .begin()、s2 [i] .end()); // s2の各要素を並べ替える 26 for(int j = 0 ; j <s3.size(); j ++){ //走査s3 27 if(s3 [j] == s2 [i]){ // ソート後のs3の要素がソート後のs2の要素と等しい場合 28 cout << s1 [i] << " " ; // ソートされていないキーワードワードをs1に出力 29 } 30 } 31 } 32 return 0 ; 33 }