如何从向量中分割字符串

时间:2016-11-23 05:46:56

标签: c++ string vector split

我的作业如下:

第二步 - 使用以下格式创建名为connections.txt的文件:

Kelp-SeaUrchins
Kelp-SmallFishes

从文件中读取这些名称,并将每个字符串拆分为两个(org1,org2)。现在就通过打印来测试你的工作。例如:

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

我不确定如何分割存储在向量中的字符串,使用连字符作为分割它的标记。我被指示要么创建我自己的函数,比如int ind(vector(string)orgs,string animal){返回orgs中动物的索引。}或使用find函数。

1 个答案:

答案 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
(如果需要,您可以将它们放在变量org1org2中。)

<小时/> 如果org1和org2不包含任何空格,那么你可以使用另一种技巧。

在每一行中,您可以用空格替换-。(std :: replace)。
然后只需使用字符串流来获取令牌。

<小时/> 旁注:这只是为了帮助您。你应该自己做功课。