2017-12-07 13 views
1

XMLからデリミタの値をとる構造体メンバがあります。その構造体メンバをデリミタとして使用したいと思います。しかし、getline()関数は区切り文字をcharとして取るので、私はそこに張り付いています。C++のgetline()関数で文字列を区切り文字として使用する方法

istream& getline (istream& is, string& str, char delim)

私は私のコードでは、次のこと行っている: -

string ABC = struct.delimiter; // Here struct.delimiter is takes value of 
            d delimiter from XML delimiter = '=' 

を、私は

getline(string1,string2, ABC); 

として使用したいことは可能ですか? または 別の方法がありますか?

+0

「ABC」は1文字を含むことが保証されていますか? – Kevin

+0

ABCには '='などの区切り文字が含まれているため、文字ではない文字列のように動作し、使用できません。同じことをgetline()以外の別の関数がありますか? –

+0

しかし、それは常に単一の文字か、 '' = "'、: "" '"、いくつかの大区切り文字 "'などのようになりますか? – Kevin

答えて

0

getLineでこれを行うことはできません。これを行うには、行を取得して文字列に格納し、区切り文字を見つけるfind()関数を使用するのが最も良い方法です。

string string; // Your line 
string ABC = struct.delimiter; // Delimited 
getline(input, string); // Get line from stream - Thx Kevin 
string subStr = str.substr(0, str.find(ABC)); // this will get you the first segment 

ここから、読んだデータを調べてすべてのセグメントを見つけるためのループを作成できます。

getline(string1, string2, ABC[0]); 

それとも、その保証が一層明白にするためにABCcharします

+1

3行目が 'getline'を宣言しているのはなぜですか?それは 'getline(is、str)'であるはずですか? – Kevin

+0

あなたは正しいです、私はちょうど彼の最初のgetLineをコピーしましたが、明らかに間違ったものは、テストするIDEを持っていないので、私は少し盲目的に書いています。 – TheMPC

0

ABCた場合は、文字列のうち最初の文字を取得するためにABC[0]を使用することができます長さで単一の文字であることが保証されます。

char ABC = struct.delimiter; // (assuming struct.delimiter is also a char, 
          // if not use srtuct.delimiter[0]) 
getline(string1, string2, ABC); 
+0

デリミタをダブルキャラクタとして使用したい場合は、getlineで使用できますか?それはどうすれば?または他のSTL機能がありますか? –

+0

'getline'を使用することはできません。 TheMPCの答えはあなたのための解決策かもしれません。 – Kevin

関連する問題