2016-11-23 87 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来获取您的令牌。


附注:这只是为了帮助你。你应该自己做作业。