2016-11-23 5 views
-2

次のように私の宿題は次のとおりです。ベクターから文字列を分割する方法

ステップ2 - のような形式でconnections.txtというファイルを作成します。ファイルからこれらの名前を読む

Kelp-SeaUrchins 
Kelp-SmallFishes 

各文字列を2つに分割します(org1、org2)。今すぐ印刷で作業をテストしてください。たとえば:

cout << “pair = “ << org1 << “ , “ << org2 << endl; 

私はそれを分割するトークンとしてハイフンを使用して、ベクトルに格納された文字列を、分割するかどうかはわかりません。 int ind(vector(string)orgs、string animal){動物のorgを返す}のような独自の関数を作成するか、find関数を使うように指示されました。

vector<string> lines; 
for (string line; file >> line;) 
    lines.push_back(line); 

あなたがC++ 11からの正規表現ライブラリを使用することができます。

ifstream file{ "connections.txt", ios_base::in }; 
if (!file) throw std::exception("failed to open file"); 

は、すべての行を読む:ここ

+1

http://stackoverflow.com/questions/236129/split-a-string-in-c – Blacktempel

答えて

0

はファイル

開く...一つのアプローチであります

regex pat{ R"(([A-Za-z0-9]+)-([A-Za-z0-9]+))" }; 
for (auto& line : lines) { 
    smatch matches; 
    if (regex_match(line, matches, pat)) 
     cout << "pair = " << matches[1] << ", " << matches[2] << endl; 
} 

あなたはあなたのニーズに応じてパターンをオーム。
ここでは、「少なくとも1つの英数字」と「-」との間で「少なくとも1つの英数字」を照合しようとします。 [0]に一致する文字列全体が含まれます。 [1] [2]あなたのORG2
(あなたがしたい場合は、変数org1org2にそれらを取ることができます。)


すなわち第2の英数字部分が含まれていますあなたのORG1
試合すなわち、最初の英数字部分が含まれています
試合org1とorg2に空白が含まれていない場合は、別のトリックを使用できます。

すべての行で、-をブランクに置き換えることができます(std :: replace)。
次に、文字列ストリームを使用してトークンを取得します。


サイドノート:これはあなたを助けるためのものです。あなたは自分で宿題をするべきです。

関連する問題