如何从矢量字符串中获取一串联合集?

时间:2011-09-26 12:38:33

标签: c++ stl vector

我有一个载有一些文件扩展名的矢量字符串,如下所示:

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可以删除范围内的连续重复项。这与我的病情无关。你能告诉我怎么做吗?谢谢!

3 个答案:

答案 0 :(得分:4)

在此处查看: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;

答案 1 :(得分:1)

我将每个字符串tokenize分成组成部分(使用分号作为分隔符),并将生成的标记粘贴到集合中。该组的结果内容就是您要找的内容。

答案 2 :(得分:0)

您需要解析包含多个文件扩展名的字符串,然后将它们推送到向量中。之后std::unique会做你想要的。看一下Boost.Tokenizer类,这应该可以解决这个问题。