#include <iostream>
using namespace std;
#include <string>
#include <unordered_map>
#include <algorithm>
#include<numeric>
#include<vector>
int main()
{
vector<string> words = { "Science", "is", "what", "we", "understand", "well", "enough", "to", "explain", "to", "a", "computer.", "Art", "is", "everything", "else", "we", "do" };
vector<string> words_1 = words;
int maxWidth = 20;
vector<int> vec_1;
vector<int> vec_2;
for (int i = 0; i < words.size(); i++) {
vec_1.push_back(words[i].size());
}
cout << "words中每个字符串的个数为:";
for (int i = 0; i < vec_1.size(); i++) {
cout << vec_1[i] << " ";
}
cout << endl;
typedef pair<int, int>P;
P p1;
vector <P>vec_3;
vector <int> vec_4; //记录起始位置
int count_1 = 0;
int number = 0;
int number_2 = 0; //字母个数
while (number != vec_1.size() ) {
if (count_1 + vec_1[number] > maxWidth) {
p1 = make_pair(number_2, count_1);
vec_3.push_back(p1);
vec_4.push_back(number);
count_1 = 0;
number_2 = 0;
continue;
}
count_1 += vec_1[number];
count_1++;
number_2++;
number++;
if (number == vec_1.size()) {
p1 = make_pair(number_2, count_1);
vec_3.push_back(p1);
vec_4.push_back(number);
}
}
cout << "vec_3的每个元素为:"<<endl;
for (int i = 0; i < vec_3.size(); i++) {
cout <<"words中的终止位置: "<<vec_4[i] << " 每一个组字符串的个数:" << vec_3[i].first << "每一组共有字符: " << vec_3[i].second << "个 " << endl;
}
cout << endl;
vector<string> result;
int vec_3_1 = 0, vec_3_2 = 0, blank=0, vec_3_3=0,vec_3_4=0;
for (int i = 0; i < vec_3.size(); i++) {
vec_3_1 = vec_3[i].first; //字符个数
blank = maxWidth-(vec_3[i].second - vec_3_1); //空格个数
vec_3_3 = vec_4[i]; //终止位置
vec_3_4 = vec_3_3 - vec_3_1;//起始位置
for (int j = 0; j < blank; j++) {
words[vec_3_4] += ' ';
vec_3_4++;
if (vec_3_1 == 1 && vec_3_4 == vec_3_3) {
vec_3_4 = vec_3_3 - vec_3_1;
}
if (vec_3_4 == vec_3_3 -1) {
vec_3_4 = vec_3_3 - vec_3_1;
}
}
vec_3_4 = vec_3_4 = vec_3_3 - vec_3_1;//起始位置
string s;
for (int i = vec_3_4; i < vec_3_3; i++) {
s += words[i];
}
result.push_back(s);
}
cout << "第一次result的元素为(最后一行未修改):" << endl;
for (int i = 0; i < result.size(); i++) {
cout << result[i] << "... " << result[i].size() << endl;
}
cout << endl;
string temp;
//对最后一行元素进行操作
for (int i = vec_4[vec_3.size() - 1] - vec_3[vec_3.size() - 1].first ; i < vec_4[vec_3.size() - 1]; i++) {
temp += words_1[i];
if (temp.size() == maxWidth) {
break;
}
temp += ' ';
}
blank = maxWidth - vec_3[vec_3.size() - 1].second ; //空格个数
for (int i = 0; i < blank; i++) {
temp += ' ';
}
result[result.size() - 1] = temp;
cout << "result的最后一行修改后的元素为:" << endl;
for (int i = 0; i < result.size(); i++) {
cout << result[i] << "... " << result[i].size() << endl;
}
cout << endl;
system("pause");
return 0;
}