题目:
输入若干行代码,使其各列单词左边界对齐,单词之间至少要空一格。
输入:
乱格式的若干行代码。
输出:
对齐后的代码。
主要是getline、stringstream以及二维vector的应用,用二维vector储存文本,再找出每一列的最长字符串的长度。
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <cstring>
#include <algorithm>
using namespace std;
int cnt[200];
int main()
{
memset(cnt, 0, sizeof(cnt) );
vector<vector<string> > all;
string s;
string word;
while(getline(cin, s) )
{
vector<string> line;
stringstream ss(s);
while(ss >> word) line.push_back(word);
all.push_back(line);
}
for( int i = 0; i < all.size(); i++)
for( int j = 0; j < all[i].size(); j++)
cnt[j] = max( (int)all[i][j].length(), cnt[j]);
for( int i = 0; i < all.size(); i++)
{
for( int j = 0; j < all[i].size(); j++){
cout << all[i][j];
if( j != (all[i].size() - 1))
for( int k = 0; k < cnt[j] - (int)all[i][j].length() + 1; k++)
cout << " ";
}
cout << endl;
}
return 0;
}
STL<algorithm>库中的max()函数的参数类型需相同;
一个string字符串不能用sizeof运算符获取其字符个数,用sizeof只能得到类string的大小,若想获取一个string对象的字符个数应用接口s.length();
vector虽然是不定长的,但不代表可以直接对任意未定义的元素进行操作,只能通过其接口push_back()等对元素进行定义后才可以操作。