将字符串分割成等长的部分c++

Dar*_*loc 0 c++ string loops substring

我想迭代地将任意长度的字符串分解为长度 = 80的子字符串,直到最终子字符串的大小小于 80 或 0。假设该字符串不能被 80 整除,因此最终子字符串的长度不一定是 80。我在这里做错了什么?

#include <string>
#include <math.h>

string sub;

for (int i = 0; i < ceil(str.length()/80); i++) {
            if(str.length()/80 >= 1){
                sub = str.substr(i*80, 80);
            }
            if(str.length()/80 == 0){
                 sub = str.substr(i*80, str.length()%80);
            }
            if(sub.length() <= 0){
                 return;
Run Code Online (Sandbox Code Playgroud)

joh*_*ohn 6

ceil(str.length()/80)是错误的,因为它是整数除法。ceil(str.length()/80.0)会工作得更好。然而,使用浮点运算感觉根本就是错误的。

if(str.length()/80 >= 1){
     sub = str.substr(i*80, 80);
}
if(str.length()/80 == 0){
     sub = str.substr(i*80, str.length()%80);
}
Run Code Online (Sandbox Code Playgroud)

看起来不错,但它不必要地复杂,因为允许 substr 的第二个参数超过字符串的长度,在这种情况下会选择字符串的其余部分。这sub = str.substr(i*80, 80);就是您需要做的全部。

这是我的编码方式

for (size_t i = 0; i < str.size(); i += 80)
{
     string sub = str.substr(i, 80);
     ...
}
Run Code Online (Sandbox Code Playgroud)