如何从一个向量字符串得到一个字符串的联合集

How to get a string of union set from a vector string?

本文关键字:字符串 一个 合集 向量      更新时间:2023-10-16

我有一个矢量字符串填充一些文件扩展名如下:

vector<string> vExt;
vExt.push_back("*.JPG;*.TGA;*.TIF");
vExt.push_back("*.PNG;*.RAW");
vExt.push_back("*.BMP;*.HDF");
vExt.push_back("*.GIF");
vExt.push_back("*.JPG");
vExt.push_back("*.BMP");

我现在想从上面提到的向量字符串中获得一个联合集字符串,其中每个文件扩展名在结果字符串中必须是唯一的。对于我给出的示例,结果字符串应该采用"*.JPG;*.TGA;*.TIF;*.PNG;*.RAW;*.BMP;*.HDF;*.GIF"的形式。

我知道std::unique可以删除range中连续的重复项。这对我的情况不起作用。你能告诉我怎么做吗?谢谢你!

查看现场直播:http://ideone.com/0fmy0 (FIXED)

#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <set>
int main()
{
    std::vector<std::string> vExt;
    vExt.push_back("*.JPG;*.TGA;*.TIF");
    vExt.push_back("*.PNG;*.RAW");
    vExt.push_back("*.BMP;*.HDF");
    vExt.push_back("*.GIF");
    vExt.push_back("*.JPG");
    vExt.push_back("*.BMP");
    std::stringstream ss;
    std::copy(vExt.begin(), vExt.end(),
            std::ostream_iterator<std::string>(ss, ";"));
    std::string element;
    std::set<std::string> unique;
    while (std::getline(ss, element, ';'))
        unique.insert(unique.end(), element);
    std::stringstream oss;
    std::copy(unique.begin(), unique.end(),
            std::ostream_iterator<std::string>(oss, ";"));
    std::cout << oss.str() << std::endl;
    return 0;
}
输出:

*.BMP;*.GIF;*.HDF;*.JPG;*.PNG;*.RAW;*.TGA;*.TIF;

我会将每个字符串标记为组成部分(使用分号作为分隔符),并将生成的标记粘贴到一个集合中。

您需要解析包含多个文件扩展名的字符串,然后将它们推入向量。之后,std::unique会做你想做的。看看Boost。

相关文章: