我有一个载有一些文件扩展名的矢量字符串,如下所示:
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可以删除范围内的连续重复项。这与我的病情无关。你能告诉我怎么做吗?谢谢!
答案 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类,这应该可以解决这个问题。