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)
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)