gpt4 book ai didi

c++ - 用最少的代码行替换c++中的一个sef字符

转载 作者:行者123 更新时间:2023-11-30 03:21:55 25 4
gpt4 key购买 nike

我在 C++ 中使用以下函数来替换一组 ASCII 字符。

std::string debug::convertStringToEdiFormat(const char *ediBuffer) {
std::string local(ediBuffer);
std::replace(local.begin(), local.end(), '\037', ':');
std::replace(local.begin(), local.end(), '\031', '*');
std::replace(local.begin(), local.end(), '\035', '+');
std::replace(local.begin(), local.end(), '\034', '\'');
return std::string(local);
}

问题是它太长了。如果我想替换 100 个字符,它将有 100 行代码。是否有另一个函数需要更少的代码并允许我做同样的事情?

最佳答案

这就是你要找的:

array< char, 256 > m;
// fill m
//...
m['\037'] = ':';
m['\031'] = '*';
m['\035'] = '+';
m['\034'] = '\'';
//...
string s{ "Hello world!" };
for (auto& c : s)
c = m[c];

如果您只需要更改几个字符,您可以使用 std::transform :

auto my_transform = [](const char c)
{
switch (c)
{
case '\037': return ':';
case '\031': return '*';
case '\035': return '+';
case '\034': return '\'';
default: return c;
}
};

std::string s{ "\037\031\035\034" };
std::transform(s.begin(), s.end(), s.begin(), my_transform);

参见 live example.

关于c++ - 用最少的代码行替换c++中的一个sef字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51667953/

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