2012-04-10 17 views
4

私はコマンドラインアプリケーションを作成していますが、パラメータ付きのコマンドを許可しようとしています。または、パラメータが引用符で囲まれている場合は、1パラメータとして扱われます。std :: getlineは空白を削除しますか?

例:テスト "1 2"

"試験" されるコマンドは、 "1 2" が渡された単一のパラメータであろう。

次のコードスニペットの使用:ただしSTD

while(getline(t, param, ' ')) { 
    if (param.find("\"") != string::npos) { 
     ss += param; 
     if (glue) { 
      glue = false; 
      params.push_back(ss); 
      ss = ""; 
     } 
     else { 
      glue = true; 
     } 
    } 
    else { 
     params.push_back(param); 
    } 
} 

を:: getlineのは、私がしまし自動私のパラメータが「12」

「1 2」から変更することが原因となっている空白を削除しているようです周囲を見回したが、結果に「空白を除去しない方法」ではなく「空白を除去する方法」の回答があふれている

誰もが何か提案がありますか?

+0

代わりに車輪の再発明の、GNU [ 'gengetopt'](HTTPを使用します//www.gnuを。 org/software/gengetopt/gengetopt.html)を使用して、 'getopt_long'ベースのコマンドラインパーサールールセットを作成します。これは他のオプションの中でも引用符で囲まれたテキスト要素を扱います。 –

答えて

1

ええと' 'を区切り文字としてstd::getlineに使用するように指示しています。もちろん、それは空白を取り除くでしょう。

getline(t, param, ' '); 

のgetlineでの3番目の引数が区切り文字である: http://www.cplusplus.com/reference/string/getline/

7

しかしSTD :: getlineの自動あなたがするのgetlineを言っている正確に何が

空白を削除しているようです。あなたが入力行を解析したい場合は、 '\n'が発見されるまで、それを読んで、それを処理する必要があります。

while(getline(t, param)) { 
    /* .. */ 
} 
+0

私の恐ろしい論理を指摘していただきありがとうございますT_T私は休憩を取る必要があるように見えます。 – user1324726

関連する問題