替换矢量中的值
Replace value in a vector
本文关键字:替换 更新时间:2023-10-16
我想在字符串以[[
开头的地方添加右括号
我试着使用find_if
、replace_if
,但结果发现有些不对劲
std::vector<std::string> vector(3);
包含:
0: text
1: [[text
2: text
我想要什么:
0: text
1: [[text]]
2: text
你能帮我解释一下算法吗?
也许是这样的:
for (std::string & s : vector)
{
if (s.size() > 1 && s[0] == '[' && s[1] == '[')
s += "]]";
}
如果要检查已有的括号,请再添加一些检查。
简单的解决方案:
int main()
{
vector<string> v;
v.push_back("text");
v.push_back("[[text");
v.push_back("text");
for (unsigned i = 0; i < v.size(); i++)
{
if (v[i].find("[[") == 0)
{
v[i].append("]]");
}
}
}
来一点for_each
动作怎么样?
void check_and_replace(std::string& str) {
if (str.length() >= 2) {
if (str[0] == '[' && str[1] == '[')
str += "]]";
}
}
for_each(myvector.begin(), myvector.end(), check_and_replace);
哦,这很容易。不存在用于突变多个值的find_if
/replace_if
变体,但存在copy_if
。
因此,给定我们的矢量
std::vector<std::string> v = { "text", "[[text", "text" };
我们可以隔离我们想要改变的所有元素:
std::vector<std::reference_wrapper<std::string>> v2;
std::copy_if(v.begin(), v.end(), std::back_inserter(v2), [](std::string const& s) { return s.compare(0, 2, "[[") == 0 && (s.size() < 2 || s.compare(s.size() - 2, 2, "]]")); } );
然后简单地将它们中的每一个转换为所需的输出值:
std::for_each(v2.begin(), v2.end(), [](std::string& x) { return x += "]]"; });
多亏了标准的库算法,我们也可以轻松地检查我们的工作:
std::for_each(v.begin(), v.end(), [](std::string const& x) { std::cout << x << std::endl; });
只需确保包含所有必需的标头。
#include <vector>
#include <string>
#include <iostream>
#include <functional>
#include <algorithm>
find_if将起作用。你在用什么预测器?
试试这个:
boolean containsBrackets( string s )
{
s.contains("[[");
}
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 如何用转义符替换字符串中的所有特殊字符
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 在一个读写器队列中,我可以用volatile替换原子吗
- 用符号版本替换对函数的所有调用
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 替换基于地图的所有引用
- 按平均值替换数组中的元素
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 初始化 std::vector 替换为单大括号而不是双大括号
- 删除/替换C++字符串中的多字符 (ÿû)
- 将 malloc 替换为数组
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何在C++中用'\'替换''来处理转义序列?
- 替换密码:哪一个?
- 替换 C++17 中移除的绑定 1st
- 将 Boost MPL 容器替换为 C++17 功能
- C++:如何用单个命令替换复杂的迭代?
- C++ 替换字节数组中项的顺序