gpt4 book ai didi

c++ - 借助定界符对重复字符串执行 vector push_back

转载 作者:行者123 更新时间:2023-11-30 01:55:19 27 4
gpt4 key购买 nike

我正在尝试读取 PATH 环境变量并使用 vector 功能删除其中存在的所有重复项,例如 - sorteraseunique。但正如我所见, vector 将默认用换行符分隔每个元素。当我得到路径为 C:\Program Files(x86)\... 时,它在 C:/ Program 处中断。到目前为止,这是我的代码:

char *path = getenv("PATH");
char str[10012] = "";
strcpy(str,path);
string strr(str);
vector<string> vec;
stringstream ss(strr);
string s;
while(ss >> s)
{
push_back(s);
}
sort(vec.begin(),vec.end());
vec.erase(unique(vec.begin(),vec.end()),vec.end());
for(unsigned i=0;i<vec.size();i++)
{
cout<<vec[i]<<endl;
}

是分隔符的问题吗?我需要在每个 ; 处 pus_back 并搜索重复项。任何人都可以在这方面帮助我。

最佳答案

我会使用 stringstream 将其切碎,并使用 set 来确保没有重复项。

std::string p { std::getenv("PATH") }
std::set<string> set;
std::stringstream ss { p };
std::string s;
while(std::getline(ss, s, ':')) //this might need to be ';' for windows
{
set.insert(s);
}
for(const auto& elem : set)
std::cout << elem << std::endl;

如果出于某种原因需要使用 vector ,您需要使用 std::sort 对其进行排序,然后使用 std::unique 删除重复项,然后删除删除松弛。

std::sort(begin(vec), end(vec));
auto it=std::unique(begin(vec), end(vec));
vec.erase(it, end(vec));

编辑:文档链接

http://en.cppreference.com/w/cpp/container/set

http://en.cppreference.com/w/cpp/algorithm/unique

http://en.cppreference.com/w/cpp/algorithm/sort

关于c++ - 借助定界符对重复字符串执行 vector push_back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com