我的作业如下:
第二步 - 使用以下格式创建名为connections.txt的文件:
Kelp-SeaUrchins
Kelp-SmallFishes
从文件中读取这些名称,并将每个字符串拆分为两个(org1,org2)。现在就通过打印来测试你的工作。例如:
cout << “pair = “ << org1 << “ , “ << org2 << endl;
我不确定如何分割存储在向量中的字符串,使用连字符作为分割它的标记。我被指示要么创建我自己的函数,比如int ind(vector(string)orgs,string animal){返回orgs中动物的索引。}或使用find函数。
答案 0 :(得分: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;
}
您必须根据自己的需要提出模式
在这里,它将尝试匹配“至少一个字母数字”,然后匹配-
然后“至少一个字母数字”。
matches [0]将包含整个匹配的字符串
匹配[1]将包含第一个字母数字部分,即您的org1
匹配[2]将包含第二个字母数字部分,即您的org2
(如果需要,您可以将它们放在变量org1
和org2
中。)
在每一行中,您可以用空格替换-
。(std :: replace)。
然后只需使用字符串流来获取令牌。
<小时/> 旁注:这只是为了帮助您。你应该自己做功课。