如何从向量字符串中获取并集字符串?

发布于 2024-12-06 16:10:16 字数 463 浏览 0 评论 0原文

我有一个填充了一些文件扩展名的向量字符串,如下所示:

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 可以删除范围内的连续重复项。它不适合我的条件。您能告诉我该怎么做吗?谢谢你!

I have a vector string filled with some file extensions as follows:

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");

I now want to get a string of union set from the above-mentioned vector string, in which each file extension must be unique in the resulting string. As for my given example, the resulting string should take the form of "*.JPG;*.TGA;*.TIF;*.PNG;*.RAW;*.BMP;*.HDF;*.GIF".

I know that std::unique can remove consecutive duplicates in range. It con't work with my condition. Would you please show me how to do that? Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

睫毛溺水了 2024-12-13 16:10:16

在这里查看它:http://ideone.com/0fmy0FIXED

#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;

See it live here: 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;
}

output:

*.BMP;*.GIF;*.HDF;*.JPG;*.PNG;*.RAW;*.TGA;*.TIF;
风流物 2024-12-13 16:10:16

I'd tokenize each string into constituent parts (using semicolon as the separator), and stick the resulting tokens into a set. The resultant contents of that set is what you're looking for.

清风夜微凉 2024-12-13 16:10:16

您需要解析包含多个文件扩展名的字符串,然后将它们推入向量中。之后 std::unique 将执行您想要的操作。看一下 Boost.Tokenizer 类,这应该会让这变得微不足道。

You need to parse the strings that contain multiple file extensions and then push them into the vector. After that std::unique will do what you want. Have a look at the Boost.Tokenizer class, that should make this trivial.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文