参照
https://blog.csdn.net/wjh2622075127/article/details/81639534
考え
有効なコマンドパラメータマップテーブルと、有効なコマンド入力を保存するためのコンテナ
入力されたコマンドセットを保存するための効果的なコンテナ(自動選別)
プラス有効なコマンドテーブル記憶「 - 」、有効なコマンドを取り出すのトラブルを避けるために
実現
1の#include <ビット/ STDC ++ H.> 2 。3 。4 使用して 名前空間STD; 5 。6地図< 文字列、整数 >表; // 有効なコマンドテーブル 7ベクトル< ストリング >オーダー; // 入力コマンド 8地図< 文字列、文字列 > CAN; // パラメータ 9。 SET < ストリング > ANS; // 有効なコマンドを入力 10 11。 INT メイン(){ 12は ストリングS、 13である CIN >> S。 14 // 有效命令表 15 のためには(size_t i = 0 ; iは++; iは()s.sizeを<ない){ 16 列全く。 17 にstringstreamのT。 18 T << ' - ' << S [i]は、 19 トン>> なし。 20 であれば(私は(s.sizeを<) - 1つの && S [I + 1 ] == ' :'){ // 有参数 21 テーブル[NO] = 1 。 22 私は++します; 23 } 24 他{ // 无参数 25 テーブル[NO] = 0 ; 26 } 27 } 28 29 INT N。 30 CIN >> N。 31 CIN。取得(); 32 33 のために(int型 i = 1 ; iが<= N iが++ ){ 34 35 order.clear()。 36 can.clear()。 37 ans.clear()。 38 39 のgetline(CIN、S)。 40 にstringstream ssの。 41の SS <<S; 42は 、一方(SS >> S){ 43であり ; order.push_back(S) 44である } 45 // 入力コマンド解析 46である ため(J = size_t型1 ; J <order.size(); J ++ ){ 47 // コマンド合法 48 のiF(table.count(注文[J])== 0 ){ 49 BREAK ; 50 } 51れる // パラメータなし 52である 場合(表[オーダー[J]] == 0 ){ 53である (ans.insertオーダー[J]); 54である } 55 // 带参 56 そう であれば(J <order.size() - 1 ){ 57 ans.insert(順[J])。 58 缶[オーダー[J] =オーダー[J + 1 ]。 59 J ++ ; 60 } 61 他{ 62 ブレーク。 63 } 64 } 65 // 输出 66 はcout << " ケース" << I << " :" ; 67 セット < 文字列> ::反復子がある = ans.begin()。 68 一方(ある!= ans.end()){ 69が あれば(can.count(* である)> 0 ){ 70 COUTは<< ' ' << * である << ' ' << [*できています]。 71 } 72 他{ 73 COUT << ' ' << * です。 74 } 75 で ++ 。 77 COUT << ENDL。 78 } 79 80 戻り 0 ; 81 }
タイトル
問題の説明
あなたは、与えられたコマンドラインオプションを解析するためのコマンドライン解析プログラムを書くことです。各コマンドは、正確にそれらの間のスペースで区切って複数の文字列で構成されています。コマンドラインツールの名前、小文字、それが処理されないあなたのプログラムのためにこれらの文字列の最初の。ツール名の後いくつかのオプションが含まれていてもよいし、いくつかのパラメータはオプションではありませんを含むことができます。
引数なし引数を持つオプションとオプション:オプションの2種類があります。非パラメータオプションの正規形は、「-a」又は「-B」のような単一の小文字、続いてマイナス記号です。スペースで区切られた2つの文字列による帯域パラメータオプションは、前者が後者はオプションパラメータが空の文字列小文字、数字、およびマイナス組成物である、パラメータなしのオプションと同じ形式が必要。
オプションを受け入れる必要がフォーマット文字列の彼のコマンドラインツールを指定して使用可能な著者のコマンドラインツール。この文字列は小文字の各々が受け入れプログラムのオプションを示すいくつかの小文字と結腸、から成ります。コロン小文字の背中が、それはパラメータの選択を示している場合、オプションはそうでない場合は引数ではなかったです。例えば、 "AB:mは:" - (パラメータを持つ)、及び"-m"(パラメータ) "B"(パラメータなし) "-a"、すなわち、プログラムは3つのオプションを受け入れることを示しています。
コマンドラインツールでは、あなたのプログラムをテストするには、コマンドラインの数を調整しました。各コマンドラインの場合は、いつでもツールをバック分析する必要があります。あなたはツールの文字列が発生した場合には、正当なオプションではなく、正当なオプションパラメータでもない、解析が停止します。あなたのプログラムは、それらを無視すべきであるので、構成しないための残りの未解析の一部のコマンドラインオプション。
引数なし引数を持つオプションとオプション:オプションの2種類があります。非パラメータオプションの正規形は、「-a」又は「-B」のような単一の小文字、続いてマイナス記号です。スペースで区切られた2つの文字列による帯域パラメータオプションは、前者が後者はオプションパラメータが空の文字列小文字、数字、およびマイナス組成物である、パラメータなしのオプションと同じ形式が必要。
オプションを受け入れる必要がフォーマット文字列の彼のコマンドラインツールを指定して使用可能な著者のコマンドラインツール。この文字列は小文字の各々が受け入れプログラムのオプションを示すいくつかの小文字と結腸、から成ります。コロン小文字の背中が、それはパラメータの選択を示している場合、オプションはそうでない場合は引数ではなかったです。例えば、 "AB:mは:" - (パラメータを持つ)、及び"-m"(パラメータ) "B"(パラメータなし) "-a"、すなわち、プログラムは3つのオプションを受け入れることを示しています。
コマンドラインツールでは、あなたのプログラムをテストするには、コマンドラインの数を調整しました。各コマンドラインの場合は、いつでもツールをバック分析する必要があります。あなたはツールの文字列が発生した場合には、正当なオプションではなく、正当なオプションパラメータでもない、解析が停止します。あなたのプログラムは、それらを無視すべきであるので、構成しないための残りの未解析の一部のコマンドラインオプション。
入力形式
入力フォーマットの最初の行は、1文字以上、52以下での長さを含む文字列です。フォーマット文字列は、各小文字は高々一度、どの2つの隣接するコロンは、それはコロンで始まっています表示されないことを保証するために、小文字のみとコロンが含まれています。
第二の入力線は正の整数N(1≤N≤20)であり 、 次のコマンド行の数を示し処理する必要があります。
次に、N個の行があり、各行がない256個のを超える文字を含む、処理するコマンドラインは、です。このコマンドは、単一の空白文字列の数で区切る必要があり、各文字列は小文字、数字、およびマイナスが含まれています。
第二の入力線は正の整数N(1≤N≤20)であり 、 次のコマンド行の数を示し処理する必要があります。
次に、N個の行があり、各行がない256個のを超える文字を含む、処理するコマンドラインは、です。このコマンドは、単一の空白文字列の数で区切る必要があり、各文字列は小文字、数字、およびマイナスが含まれています。
出力フォーマット
N本の出力線があります。「ケースI:」の特徴i行目スタートは、その後、正確に一つのスペースがあるはず出力も、その名前になった後、出力は、引数とオプションについて、に従ってアルファベットの昇順に使用されるコマンドラインオプションのすべての名前でなければなりませんその出力パラメータへ。一度だけ、コマンドラインで複数回、出力オプションをがあった場合。引数付きのオプションは、コマンドラインで複数回登場した場合は、最後のパラメータだけが行わ出力が発生します。
サンプル入力
albw:X
4つの
LS -a -l -a文書が-b
LSの
LSを-w 10 -x -w 15
LS -a -b -c -d -e -l
4つの
LS -a -l -a文書が-b
LSの
LSを-w 10 -x -w 15
LS -a -b -c -d -e -l
サンプル出力
ケース1:-a -l
ケース2:
ケース3:-w 15 -x
ケース4:-a -b
ケース2:
ケース3:-w 15 -x
ケース4:-a -b