输入一串以空格,制表或换行分隔的文本。将其中的<br>作为换行输出,<hr>作为水平标尺输出,其余单词以空格分开原样输出,每行不超过80个字符。
代码如下
// hdu1088.cpp : 定义控制台应用程序的入口点。
// Accepted
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream in("in.txt");
void my_split(string s, vector<string>* ret)
{
int len = s.size();
string temp;
for (int i = 0; i < len; )
{
if (s[i] != ' '&&s[i] != '\t'&&s[i] != '\n')
{
temp += s[i];
++i;
}
else
{
if(temp.size()!=0)
ret->push_back(temp);
temp = "";
int j = i;
while (j == ' ' || j == '\t' || j == '\n')
++j;
i = j+1;
}
}
if (temp.size()!=0)
ret->push_back(temp);
}
int main()
{
string s;
string line;
//getline默认不读取换行符,但可以读取制表符和空格
//第三个参数设为其他字符,可以读取换行
while (getline(cin, line,'!'))
{
s += line;
}
vector<string> ret;
my_split(s, &ret);
int cur_len = 0;
for (int i = 0; i < ret.size(); i++)
{
if (ret[i] == "<br>" || ret[i] == "<hr>")
{
if (ret[i] == "<br>")
{
cout << endl;
cur_len = 0; //出现一次换行
}
else
{
//之前有换行
if (!cur_len)
{
cout << string(80, '-') << endl;
cur_len = 0; //出现一次换行
}
//之前没有换行
else
{
cout << endl;
cout << string(80, '-') << endl;
cur_len = 0;
}
}
}
else
{
if (!cur_len)
{
cout << ret[i];
cur_len = ret[i].length();
}
else if (cur_len + ret[i].length()+1 > 80)
{
cout << endl;
cout << ret[i];
cur_len = ret[i].length(); //当前长度
}
else
{
cout << " " << ret[i];
cur_len += ret[i].length() + 1;
}
}
}
cout << endl;
system("pause");
return 0;
}
一开始我以为要把文本全部输入,所以写了一个分割函数。PE一发以后搜题解,发现大家都是按输入一个单词输出一个单词做的,居然可以这样。