将字符串拆分为等长的部分c ++
Posted
技术标签:
【中文标题】将字符串拆分为等长的部分c ++【英文标题】:Split string into parts of equal length c++ 【发布时间】:2020-05-31 04:57:13 【问题描述】:我想迭代地将任意长度的字符串分解为 length = 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;
【问题讨论】:
你有什么问题? 一个错误是它不能编译——所以读者不能只是将它复制并粘贴到一个临时的 .cpp 文件中然后运行它来查看它的作用。 【参考方案1】: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);
看起来不错,但它不必要地复杂,因为允许 substr 的第二个参数超过字符串的长度,在这种情况下选择字符串的其余部分。所以这个sub = str.substr(i*80, 80);
就是你需要做的。
这是我的编码方式
for (size_t i = 0; i < str.size(); i += 80)
string sub = str.substr(i, 80);
...
【讨论】:
字符串不一定能被 80 整除,所以子字符串的长度可能不是 80。if(str.length()/80 == 0)
应该是if(str.length()%80)
@DarnocEloc substr
的长度参数允许超过字符串中从给定位置到结尾的字符数。如果是这种情况,则返回的字符串将是从给定位置开始的后缀。
@DarnocEloc 正如我所说, substr 的第二个参数允许超过字符串的长度。它简化了编码。
@selbie 是的,我错过了。【参考方案2】:
下面是我的编码方式:
void split(const std::string& str)
const size_t linelength = 80;
size_t count = str.length() / linelength;
auto start = str.begin();
std::string sub;
for (size_t i = 0; i < count; i++)
size_t startoffset = i * linelength;
size_t endoffset = startoffset + linelength;
sub = std::string(start + startoffset, start + endoffset);
if (str.length() % linelength)
sub = std::string(start + count * linelength, str.end());
【讨论】:
【参考方案3】:这是您问题的替代解决方案:
#include <iostream>
#include <string>
#include <bits/stdc++.h>
using namespace std;
int main()
string initial_str = ""; //your main string
int len = initial_str.size(); // size of the main string
vector<string> sub_str; // vector of substrings
for (int i = 0; i < len; i += 80)
sub_str.push_back(initial_str.substr(i, 80));
//cout<< initial_str.substr(i, 5) << endl;
for (int i = 0; i < sub_str.size(); i++)
cout << sub_str[i] << "\n";
return 0;
【讨论】:
以上是关于将字符串拆分为等长的部分c ++的主要内容,如果未能解决你的问题,请参考以下文章