gpt4 book ai didi

c++ - 我们可以在一条语句中拆分、操作和重新连接 c++ 中的字符串吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:43 24 4
gpt4 key购买 nike

这是一个有点愚蠢的问题,但出于好奇,是否有可能在 C++ 的一个语句中用逗号拆分字符串,对字符串执行函数,然后在逗号上重新加入它?

这是我目前所拥有的:

string dostuff(const string& a) {
return string("Foo");
}

int main() {
string s("a,b,c,d,e,f");

vector<string> foobar(100);
transform(boost::make_token_iterator<string>(s.begin(), s.end(), boost::char_separator<char>(",")),
boost::make_token_iterator<string>(s.end(), s.end(), boost::char_separator<char>(",")),
foobar.begin(),
boost::bind(&dostuff, _1));
string result = boost::algorithm::join(foobar, ",");
}

所以这会导致将 "a,b,c,d,e,f" 变成 "Foo,Foo,Foo,Foo,Foo,Foo"

我知道这是 OTT,但只是想扩展我的 boost 魔法。

最佳答案

首先,请注意您的程序写入“Foo,Foo,Foo,Foo,Foo,Foo,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,"到你的结果字符串——正如评论中已经提到的,你想在那里使用 back_inserter。

至于答案,每当范围产生单个值时,我都会查看 std::accumulate(因为 fold/reduce 的 C++ 版本)

#include <string>
#include <iostream>
#include <numeric>
#include <boost/tokenizer.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/bind.hpp>
std::string dostuff(const std::string& a) {
return std::string("Foo");
}
int main() {
std::string s("a,b,c,d,e,f");
std::string result =
accumulate(
++boost::make_token_iterator<std::string>(s.begin(), s.end(), boost::char_separator<char>(",")),
boost::make_token_iterator<std::string>(s.end(), s.end(), boost::char_separator<char>(",")),
dostuff(*boost::make_token_iterator<std::string>(s.begin(), s.end(), boost::char_separator<char>(","))),
boost::bind(std::plus<std::string>(), _1,
bind(std::plus<std::string>(), ",",
bind(dostuff, _2)))); // or lambda, for slightly better readability
std::cout << result << '\n';
}

除了现在它是 方式 并重复 make_token_iterator 两次。我猜 boost.range 赢了。

关于c++ - 我们可以在一条语句中拆分、操作和重新连接 c++ 中的字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3753725/

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