只做了段落的,等有时间再来做项目列表的!
呜呜呜好难呀!
#include <iostream>
#include<string>
using namespace std;
string& trim(string& s){
if(s.empty()) {
return s;
}
s.erase(0,s.find_first_not_of(" "));
if(s.empty()) {
return s;
}
s.erase(s.find_last_not_of(" ")+1);
return s;
}
int main() {
string line;
int result = 0;
int width;
cin>>width;
int left = 0;
cin.ignore();//忽略上一个的末尾空格
getline(cin,line);
bool flag = false;//表示上一行输入的是否是空行,true代表是
while(!cin.eof()){
int length = trim(line).length();//待处理的长度
if(length == 0){
//单纯的只能增加段落间的那个空行
if(!flag){
result++;
left = 0;
flag = true;
}
}
else{
flag =false;
}
int leftlength = length;//当前待处理的长度
//处理上一行可能会剩下一些可用的空间,首先给用掉
if(left != 0){
if(leftlength < left){//剩下的空间可以用于本行输入
left -=leftlength;
leftlength = 0;
if(left>0) left--;
}
else{//剩下的空间不能用于本行的输入,需要再重新开辟
leftlength -=left;
left = 0;
}
}
while(leftlength != 0){
result++;
//用于行首处理掉空格
while(line[length-leftlength]==' '){
leftlength--;
}
if(leftlength > width){
leftlength -= width;
}
else if(leftlength == width)
{
leftlength -=width;
left = 0;
}
else{
left = width -leftlength - 1;
leftlength = 0;
}
}
getline(cin,line);
}
cout<<result;
return 0;
}