C++ 如何在存储文件内容的vector中查找指定字符串的位置并删除
实现查找逻辑的方案
首先纠正你对std::find的误解:它不止能判断字符串是否存在,返回的迭代器本身就可以用来计算元素位置,甚至可以直接传给vector::erase方法使用,不需要额外转成整数下标。
方案1:严格匹配目标字符串
如果你的匹配逻辑是大小写、字符完全一致,直接用std::find即可:
- 首先在代码开头引入必要头文件:
#include <algorithm>
- 替换你预留的查找位置代码段:
std::string target = "bob56.txt"; // 查找目标元素,返回对应迭代器 auto iter = std::find(FileInVector.begin(), FileInVector.end(), target); if (iter != FileInVector.end()) { // 若找到,直接用迭代器删除元素,无需转下标 FileInVector.erase(iter); // 如果你确实需要整数下标,可以用distance计算: // StringPosition = std::distance(FileInVector.begin(), iter); } else { // 这里可自行添加未找到目标字符串的处理逻辑 }
注意:你原有代码里直接给erase传整数下标StringPosition的写法是错误的,std::vector的erase方法只接受迭代器作为参数,不需要提前转成整数下标。
方案2:大小写不敏感匹配
如果你需要匹配时忽略大小写(比如示例中文件里的Bob56.txt要匹配目标bob56.txt),则使用std::find_if自定义匹配规则:
- 引入额外头文件:
#include <algorithm> #include <cctype>
- 查找代码如下:
std::string target = "bob56.txt"; auto iter = std::find_if(FileInVector.begin(), FileInVector.end(), [&target](const std::string& cur_str) { // 长度不一致直接不匹配 if (cur_str.size() != target.size()) return false; // 逐字符比较,忽略大小写 for (size_t i = 0; i < cur_str.size(); ++i) { if (std::tolower(static_cast<unsigned char>(cur_str[i])) != std::tolower(static_cast<unsigned char>(target[i]))) { return false; } } return true; }); if (iter != FileInVector.end()) { FileInVector.erase(iter); }
内容的提问来源于stack exchange,提问作者NATE BERGLAS
相关产品推荐
相关产品推荐

