昨天尝试写了下这个文本题,80分,今天尝试找bug, 实在找不到了,贴一下代码吧,有大佬看见了,可以帮我找下,感激不尽
#include<bits/stdc++.h>
using namespace std;
int w;
long long int ans = 0;
char s[1000005];
int sw_spa(int len)
{
int res = 0;
for(int i = 0; i < len; i ++){
if(s[i] == ' ') res ++;
if(i == len - 1) return res;
if(s[i] != ' ') break;
}
for(int i = len - 1; i >= 0; i --){
if(s[i] == ' ') res ++;
else return res;
}
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>w;
cin.get();
bool proj_prev = false;//判断上一行是否是项目
bool spa_prev = true;//判断上一行是否是空行
bool text_prev = false;//段落判断
int num_prev = 0;//上一行已填字符数
while(cin.getline(s, 1000002, '\n')) {
//cout<<"ans: "<<ans<< endl;
//cout<<"spq_prev:"<<spa_prev<<endl;
//cin.getline(s, 10002, '\n');
//cin.get();
int len = strlen(s);
//cout<<"len:"<<strlen(s)<<":::"<<s<<endl;
if(len == 0){//空白行
if(spa_prev) continue;//
else{
ans ++;
num_prev = 0;
spa_prev = true;
text_prev = false;
proj_prev = false;continue;
}
}
if(s[0] == '*' && s[1] == ' '){//项目开头
//cout<<"num_prev0:"<<num_prev<<endl;
if(text_prev){
ans ++; spa_prev = true;text_prev = false;proj_prev = false;
}
num_prev = 0;
s[0] = ' '; ans ++; num_prev = 3;
int num = sw_spa(len);
if(num != len){//不是空白
num_prev +=(len - num);
while(num_prev > w){
ans ++;
num_prev -= w; num_prev += 3;
}
//ans ++;
}
//cout<<"num_prev1:"<<num_prev<<endl;
proj_prev = true;
spa_prev = false;text_prev = false;
}
else if(proj_prev && s[0] == ' ' && s[1] == ' '){//多行项目中的一行
//cout<<"num_prev:"<<num_prev<<endl;
int num = sw_spa(len);
if(num == len){//空白行结束项目列表
ans ++;spa_prev = true;text_prev = false;proj_prev = false;num_prev = 0;continue;
}
if(num_prev != 3)
num_prev ++;
num_prev += (len - num);
//cout<<"num_prev_55:"<<num_prev<<endl;
while(num_prev > w){
ans ++; num_prev -=(w - 3);
}
spa_prev = false;text_prev = false;
}
else{//段落
//cout<<"段落1"<<endl;
//cout<<"num_prev0:"<<num_prev<<endl;
int spqnum = sw_spa(len);//首尾空格数
if(spqnum == len) {//空白行
if(! spa_prev){
ans ++;spa_prev = true;text_prev = false;proj_prev = false;num_prev = 0;
}
continue;
}
if(proj_prev){
ans ++;spa_prev = true;text_prev = false;proj_prev = false;num_prev = 0;
}
text_prev = true;
int p = 0;
if(num_prev == 0) p = 1;//需要新开一行
num_prev += (len - spqnum);
if(! spa_prev) num_prev ++;
if(num_prev < w) {//上一行未满
ans += p;spa_prev = false;proj_prev = false;
//cout<<"num_prev1:"<<num_prev<<endl;
continue;
}
num_prev -= w;//填满上一行,总行数取到未填满的那一行
ans += (num_prev / w);
num_prev %= w;
if(num_prev != 0)
ans ++;//
//cout<<"段落2"<<endl;
spa_prev = false;proj_prev = false;
//cout<<"num_prev2:"<<num_prev<<endl;
}
//cout<<"ans: "<<ans<< endl;
}
if(spa_prev) ans --;
cout<<ans <<endl;
}