将 const 无符号字符* 分配给执行就地替换或省略的 std::string
Assigning const unsigned char* to a std::string performing in-place substitution or omission
我有一个以空结尾的字符缓冲区const unsigned char* bar
。
我需要将其复制到std::string
.目前我使用
std::string foo;
foo.assign(bar);
但由于各种原因(由于bar
),值> 127 的奇数字符出现在列表中。用 32(空格)替换这些字符就足够了,最好完全省略它们。
有没有办法进行更换
在我复制到字符串之后。使用类似
std::replace(foo.begin(), foo.end(), /*something funky*/
)当我做
assign
时,使用某种谓词的"后插入器"。
我更喜欢 (2) 行的内容。在我深入研究for
循环之前,有没有一种更像 stl 的方法可以做到这一点?
如果您只想省略值>= 128(如果字符有符号,则< 0
),这样的事情应该可以解决问题:
std::copy_if(bar, bar + <length of string>,
std::back_inserter(foo),
[](char c) { return c < 128 && c >= 0;});
我更喜欢 (2) 行的内容。在我深入研究 for 循环之前,有没有一种更像 stl 的方法可以做到这一点?
考虑 std::transform 并将两个流(原始流和字符串流)视为迭代器序列:
const unsigned char* bar = some_data();
auto length = std::strlen(reinterpret_cast<const char*>(bar));
const auto bar_end = bar + length;
std::string foo{ length, ' ' }; // avoid reallocations in transform
std::transform(bar, bar_end, foo.begin(), [](const unsigned char c) -> const char {
return c > 127 ? ' ' : reinterpret_cast<const char>(c);
});
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 如何用转义符替换字符串中的所有特殊字符
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- std中有类似find_last_of的函数,而string中没有
- 使用Boost Karma替换STD :: stringstream double到STD :: String Conv
- 对 std::string 执行正则表达式搜索和替换
- 有选择地替换 C++ 中 std::string 中的 (") 双引号
- 将 C++ std::string 中的字符/字符序列替换为另一个字符序列
- 在函数的输入参数中将 char 数组替换为 std::string
- 在这个C++代码中,std::string 是否可以替换为模板参数 T,如果是这样,Meyer 关于其性能成本的论点是否仍然适用?
- 如何将 std::string 中的所有非字母字符(数字和特殊字符)替换为空格
- 替换由谓词确定的 std::string 中的字符的最 stl-ish 方法是什么
- 在 cpp 中将 cout<<“string” 替换为 cout<<“string”<
- 将 const 无符号字符* 分配给执行就地替换或省略的 std::string
- 将std::string中的字符替换为十六进制值
- 如何在c++中使用std::string替换一个字符
- 如何使用std::string将所有出现的一个字符替换为两个字符