c++拆分字符串每X个字符
C++ Split String Every X Characters
我正试图写一个函数,它需要一个字符串,并分割每X个字符:
std::vector<std::string> DIFSplitStringByNumber(std::string s, int l)
{
const char *c = s.c_str();
char buffer[l];
std::vector<std::string> entries;
entries.reserve(int(s.length() / l) + 1);
int d = 0;
for(int i = 0; i < s.length() - 1;)
{
if(d != l)
{
buffer[d] = c[i];
d++;
i++;
}
else
{
entries.push_back(std::string(buffer, l));
//Clear array
memset(buffer, 0, l);
d = 0;
}
}
return entries;
}
例如,如果我调用DIFSplitStringByNumber("hello!", 2)
,我应该得到一个包含:
[0] he
[1] ll
[2] o!
然而,它似乎只得到前两个结果(向量大小为2),当我做像DIFSplitStringByNumber("hello", 2)
这样的事情时,它崩溃了,大概是因为它试图访问一个不存在的数组索引(它期望6个字符,但只有5个)。有没有更简单的方法来做到这一点?
算法的核心实际上归结为以下两行:
for (size_t i = 0; i < s.size(); i += l)
res.push_back(s.substr(i, l));
同时,你应该通过const引用传递字符串
这将把一个字符串拆分为一个向量。如果分割的数目不是偶数,它将把多余的字符加到末尾。
std::vector<std::string> Split(const std::string& str, int splitLength)
{
int NumSubstrings = str.length() / splitLength;
std::vector<std::string> ret;
for (auto i = 0; i < NumSubstrings; i++)
{
ret.push_back(str.substr(i * splitLength, splitLength));
}
// If there are leftover characters, create a shorter item at the end.
if (str.length() % splitLength != 0)
{
ret.push_back(str.substr(splitLength * NumSubstrings));
}
return ret;
}
std::string是char的集合,一个简单的实现可以是:
std::vector<std::string> DIFSplitStringByNumber(const std::string & str, int len)
{
std::vector<std::string> entries;
for(std::string::const_iterator it(str.begin()); it != str.end();)
{
int nbChar = std::min(len,(int)std::distance(it,str.end()));
entries.push_back(std::string(it,it+nbChar));
it=it+nbChar;
};
return entries;
}
生活示例
改变计算向量大小的方式:
int size = (s.length() - 1) / l + 1;
这相当于输入字符串长度的上限除以输入长度。
顺便说一句,int(s.length() / l)
强制转换是无用的,因为两个操作数都是整数。
最后,在循环中使用这个大小:
for (int i=0; i<size; i++)
相关文章:
- 如何根据字符拆分字符串
- 使用连续分隔符和空最后一个字符进行拆分
- 拆分字符数组并存储为向量
- 通过拆分字符数组来创建字符串
- 拆分字符串输入并查找字符是否有效
- 通过正则表达式拆分字符串会切断结果的第一个字母
- C++ 如何将字符串拆分为单个字符
- 如何将字符串拆分为一组 3 个字符,它们之间有空格
- C++ 中的解析器/拆分常量字符*
- 将字符拆分为字符数组
- 在独立模式 c++ 中分隔符处拆分字符*
- 如何根据某些字符拆分字符串?经度纬度
- 用C 中的4个字符将字符串拆分
- 在qt中使用'n'字符拆分数据
- 使用向量和字符*拆分实现
- 如何将文本(诗歌)拆分为行(字符串/字符[])并查找每个行的最后一个单词
- 如何使用 c++ win32 API 拆分字符
- 按字符拆分字符串
- 从字符串 c++ 的末尾开始按字符拆分字符串
- 按字符拆分字符串