2017-10-10 4 views
2

私はコマンドラインインターフェイスで作業しています。 ユーザーは、このようなC++で同じ文字列に対してstring.substr(x、y)を複数回使用できませんか?

などのコマンドを入力します。これは、-sフラグで

add -s TITLE ARTIST 

を「歌」を追加します。これは、あります-aフラグで

add -a TITLE ARTIST 

を「アルバム」を追加します異なるフラグとのような異なるコマンドは、も削除します。

私はコマンドとフラグを評価するためにこれを行っていますが、残りの文字列を取得するのには問題があります。ユーザーの入力はcharの配列として取り込まれ、文字列に変換されます。

if (inputString.substr(0, 3) == "add"){ 
    if (inputString.substr(4, 5) == "-s"){ 
     cout << "TEST: ADD SONGS" << endl; 
     //PROBLEM IS THIS LINE 
     cout << inputString.substr(6, MAX_LENGTH) << endl; 
    } 

コマンド+アクションフラグを取得するたびに、残りの文字列を使用して実際に情報をデータベースに追加する新しい機能を実行したいと思います。

入力時に問題はありませんadd -sプログラムは、最初の文字を評価して曲を追加したいと考えています。しかし、「add -s "Sorry" "Justin Bieber"」のようなものを入力した場合、プログラムはadd -sフラグが実行されたことを認識しません。

なぜこれがどういうものなのか、どのように変更できるのか説明できますか? substr()へ。

+0

メモとして、これを自分で行うことは、傷つく世界全体になるでしょう。あなたは[Getopt](https://en.wikipedia.org/wiki/Getopt)のようなライブラリを使うことを考えましたか?それは実質的にC言語で普遍的です。 – tadman

+0

あなたは[mcve]を使って多くの質問を改善することができます。デバッガで何を観察しましたか? – Tas

+0

私は文字列分割アルゴリズムの使用を検討します:https://stackoverflow.com/questions/236129/most-elegant-way-to-split-a-string – Galik

答えて

1
if (inputString.substr(4, 5) == "-s"){ 

2番目のパラメータは文字カウントである。これは、で始まる、文字列から5つの文字(最大)を抽出し、私は、このような "としてより入力した場合しかし、4

をオフセットadd -s "Sorry" "Justin

オク、私の指を使って4をオフセットすることができます。つまり、実際には ' - '文字です。次に、その位置から始まる5文字を抽出すると、次の文字列に到着します。

-s "S 

これは5文字でカウントされます。それはsubstr()が返すものです。文字列 "-s"と等しいかどうかを比較すると明らかに失敗します。

これは、デバッグのスキルを学ぶのに便利な機会です。あなたはこのようなものを追加していた:第二if文の前に

std::cout << inputString.substr(4, 5) << std::endl; 

右を、私はあなたがすべて自分でこれを考え出しただろう確信しています。

+0

ありがとう、私はいつも第二のsubstrへのパラメータが2番目の位置でした。 – user1692517

関連する問題