c++ - 如果字符串向量中的单词在前面,则删除字符
问题描述
我有一个字符串向量,它们前面有不同的字符。例如:
"Hello
(Hello
我想删除第一次出现的字符。因此,如果单词之前有"
or (
,我希望它消失。到目前为止,我的代码是这样的。
void wash(std::vector<std::string> & data)
{
std::string b_chars = "\"'("; //Before_chars
std::string a_chars = "!?;,:.\"')"; //after_chars
data.erase(std::remove_if(data.begin(), data.end(), [&b_chars](const char& c) {
return data.find_first_of(b_chars) != std::string::npos;
}), data.end());
}
解决方案
您的情况是错误的 - 您应该确定是否c
是违规字符之一,即b_chars.find(c) != std::string::npos
.
要遍历整个向量,您可以:
std::for_each(data.begin(),
data.end(),
[&b_chars](std::string& str)
{
str.erase(std::remove_if(str.begin(),
str.end(),
[&b_chars](const char& c)
{return b_chars.find(c) != std::string::npos;}),
data.end());
});
}
但是有一个单独的字符串清洗功能而不是将自己局限于字符串向量是有意义的(我没有正确阅读您的代码,因为这是一个更有用的构建块开始):
void wash_string(std::string & s)
{
static const std::string b_chars = "\"'("; //Before_chars
static const std::string a_chars = "!?;,:.\"')"; //after_chars
s.erase(std::remove_if(s.begin(),
s.end(),
[&b_chars](const char& c)
{return b_chars.find(c) != std::string::npos;}),
s.end());
}
void wash(std::vector<std::string> & data)
{
std::for_each(data.begin(), data.end(), wash_string);
}
推荐阅读
- c++ - Qt:Qt 6.1.1 无法创建顶点着色器:错误 0x80070057
- java - 找不到 aapt2-4.1.1-6503028-windows.jar (com.android.tools.build:aapt2:4.1.1-6503028)
- node.js - 无论重启是手动的还是因为它崩溃了,如何让 PM2 打印到它的日志中?
- c# - 合并pdf文件页面大小
- c# - 如何在 Entity Framework Core 中映射 Sql 文件表
- c - 为什么不执行错误之前的解析器操作?
- reactjs - 在 react-native 中,如何正确排序取决于数据的数据获取和 useState
- flutter - 什么相当于返回(弹出)GetX 中的页面?
- r - 为什么我的电脑内存快到极限时会减少?
- selenium - 使用 Selenium C# DevTools 捕获 F12 选项网络下的所有标头