gpt4 book ai didi

c++ - 在 C++ std::string 中解析(替换)

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:54 25 4
gpt4 key购买 nike

我有一个具有以下格式的“自定义”字符串。示例:

std::string MyString = "RndOrder%5d - RndCustomer%8s - RndHex%8x";

我想替换/解析字符串:

  • %5d (%NUM_d) 将替换为随机的 5 位小数

  • %8s (%NUM_s) 将替换为随机的 8 个字符

  • %8x (%NUM_x) 将替换为随机的 8 位十六进制数

有什么函数可以帮我解析那些“特殊标记”吗?不确定我是否必须逐个解析字符串 char 并检查每个可能的组合。

最佳答案

如果格式可以变化(不总是固定的 3 个参数:%5d%8s%8x)并且您想要要以这种方式灵活,您应该为此编写自己的实现。

假设 % 之后定义的计数是一个通用数字(不仅是 5 或 8),您可以尝试使用 std::regex_searchstd::regex_match找到您正在寻找的实际助记符。例如你的表达式可能看起来像 %\d+[dsx]

然后您应该解析它以找到 COUNTtype 并替换为所需的 generator 获得的随机数.要解析,您可以尝试将上述表达式更新为 %(\d+)([dsx]) 并捕获组。

您案例的示例解析实现可能如下所示:

std::string text = "RndOrder%5d - RndCustomer%8s - RndHex%8x";
auto reg = std::regex("%(\\d+)([sdx])");
std::smatch match;
while (std::regex_search(text, match, reg))
{
const auto& full = match.str(); // in 1st iter contains "%5d"
const auto& count = match.str(1); // in 1st iter contains "5"
const auto& type = match.str(2); // in 1st iter contains "d"
// further processing: type conversion, number generation, string replacement

text = match.suffix().str();
}

有关搜索和组捕获的实现示例,您还可以查看另一个问题:Retrieving a regex search in C++

关于c++ - 在 C++ std::string 中解析(替换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973464/

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