如何从一个向量字符串得到一个字符串的联合集
How to get a string of union set from a vector string?
我有一个矢量字符串填充一些文件扩展名如下:
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。