我想添加字符串以[[
我尝试使用find_if
,replace_if
但事实证明某些事情不对
std::vector<std::string> vector(3);
包含:
0: text
1: [[text
2: text
我想要的是什么:
0: text
1: [[text]]
2: text
你能帮忙解算算法吗?
答案 0 :(得分:6)
也许是这样的:
for (std::string & s : vector)
{
if (s.size() > 1 && s[0] == '[' && s[1] == '[')
s += "]]";
}
如果要检查现有的括号,请添加更多检查。
答案 1 :(得分:3)
小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);
答案 2 :(得分:3)
简单的解决方案:
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("]]");
}
}
}
答案 3 :(得分:1)
哦,这很容易。变异值没有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>
答案 4 :(得分:0)
find_if将起作用。您使用的预测器是什么?
试试这个:
boolean containsBrackets( string s )
{
s.contains("[[");
}