2016-11-23 89 views
-2

我的功課如下:如何從矢量份額字符串

第二步 - 創建一個名爲connections.txt文件,如格式:

Kelp-SeaUrchins 
Kelp-SmallFishes 

從文件中讀取這些名稱並將每個字符串拆分爲兩個(org1,org2)。現在只需通過打印測試您的工作。例如:

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

我不知道如何拆分存儲在向量中的字符串,使用連字符作爲標記來分割它。我被指示要麼創建我自己的函數,像int ind(vector(string)orgs,string animal){返回orgs中動物的索引}或者使用find函數。

+1

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

回答

0

這是一種方法...

打開文件:

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

閱讀所有行:

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

您可以使用從C++ 11的正則表達式庫:

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; 
} 

您將不得不c根據您的需要,根據需要調整模式。
這裏它會嘗試匹配「至少一個字母數字」,然後-,然後「至少一個字母數字」。 匹配[0]將包含整個匹配的字符串。
比賽[1]將包含第一個字母數字部分,即你的ORG1
比賽[2]將包含第二個字母數字部分,也就是你的ORG2
(你可以將它們在變量org1org2如果你想。)


如果org1和org2不包含任何空格,則可以使用另一個技巧。

在每一行中,都可以用空白替換-(std :: replace)。
然後只需使用stringstreams來獲取您的令牌。


附註:這只是爲了幫助你。你應該自己做作業。