我有一个CString,我想分成小字符串。它是一个由常量2字节标题和2字节页脚组成的字符串,但字符串的其余部分没有可辨别的模式。我需要根据大小分解它们:所以前两个字节成为标题,然后我需要提取下一个2,然后是3,依此类推。 (这些数字也没有任何模式)
示例:
CString test = "1010eefabbccde1f1f"
我需要
CString header = "1010";
CString test1 = "eefa";
CString test2 = "bbccde";
CString footer = "1f1f";
我读到sscanf
用于此目的,但我只是设法将其拆分为int
。
示例:
CString test = '101022223333331010';
int a,b,c,d;
sscanf(test,"%02d%02d%03d%02d",&a,&b,&c,&d);
这适用于仅包含数字的字符串。但是当我通过将%d
更改为%s
来对字符串执行相同操作时,异常会被提升。
有更好的方法吗?
答案 0 :(得分:0)
我的理解是,如果输入string test
和vector<size_t> sizes
大小,您希望将字符串拆分为这些大小,然后您希望获取这些部分,将它们视为十六进制数字,并在vector<int> result
中返回。
我将假设您已经测试test
以确保存在正确的字符数。我将假设大小包括页眉和页脚大小。
运行这样的事情之后:
const auto test = "1010eefabbccde1f1f"s;
const vector<size_t> sizes { 4U, 4U, 6U, 4U };
const auto result = accumulate(cbegin(sizes), cend(sizes), vector<int>(), [&, pos = 0U](auto& a, const auto& b) mutable {
a.push_back(stoi(test.substr(pos, b), nullptr, 16));
pos += b;
return a;
});
result
将包含:
4112
61178个
12307678个
7967