题意:按样例输出格式,各列左边界对齐且尽量靠左,单词之间至少要空一格。
思路:记录每个列最长的单词作为格式,输出补空格即可
输入时处理需要用stream,自己写的处理居然超时了!!!
头文件:#include <sstream>
istringstream stream(处理的字符串str);
while(stream >> temp) 这个可将其单词分隔出!
参考:点击打开 ; 入门经典--习题5-1--P135
代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <string.h>
#include <sstream>
using namespace std;
#define maxn 1005
vector<string>words[maxn];
int len[200];
int main()
{
string str,temp;
int cot = 0;
memset(len,0,sizeof(len));
while(getline(cin,str))
{
temp = "";
int colNum = 0;
//这个居然超时。。。
/*for(int i=0;str[i]!='\0';i++)
{
if(str[i] != ' ')
{
temp += str[i];
if(str[i+1] == ' '){
words[cot].push_back(temp);
len[colNum] = max(len[colNum],(int)temp.length());
colNum++;
temp = "";
}
if(str[i+1] == '\0'){
words[cot++].push_back(temp);
len[colNum] = max(len[colNum],(int)temp.length());
colNum++;
temp = "";
}
}
}*/
istringstream stream(str);
while(stream >> temp)
{
words[cot].push_back(temp);
len[colNum] = max(len[colNum],(int)temp.length());
colNum++;
}
cot++;
}
int j;
for(int i=0;i<cot;i++)
{
for(j=0;j<words[i].size()-1;j++)
{
cout << words[i][j];
for(int k=0;k<len[j]-words[i][j].length()+1;k++)
cout << " ";
}
cout << words[i][j] << endl;
words[i].clear();
}
return 0;
}