救命!已经调了一个半小时了!
查看原帖
救命!已经调了一个半小时了!
731925
happy_zero楼主2023/2/23 21:24

测了样例没错,但为什么是 wa 啊!

#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
string a[N][N];//a[i][j]存的是第i行的第j个单词
int maxx[N], cnt[N];
//maxx[i]表示第i个单词的最大长度
//cnt[i]表示第i行的单词数
int main()
{
	int n = 0;
	string s; 
	while (getline(cin, s))
	{
		n++;
		int lst = 0, len = s.size();
        //lst表示当前单词的开头
        while (s[len - 1] == ' ' || s[len - 1] == '\r' || s[len - 1] == '\n') len--;//清除末尾空格
        //cout << s[len - 1] << endl;
		for (int i = 0; i < len; i++)
		{
			if (s[i] == ' ' && i == 0 || s[i - 1] == ' ') lst = i + 1;//如果当前是空格且前一个是空格
			if (s[i] == ' ' &&  i != 0 && s[i - 1] != ' ')//如果当前是空格且前一个不是空格就截取单词
			{
                //cout << i << " " << lst << endl;
                if (lst == 0) a[n][++cnt[n]] = s.substr(0, i - lst);
				else a[n][++cnt[n]] = s.substr(lst - 1, i - lst + 1);//存储单词
				lst = i + 1;
                
			}
		}
		if (lst == 0) a[n][++cnt[n]] = s.substr(0, len - lst);
		else a[n][++cnt[n]] = s.substr(lst - 1, len - lst + 1);//存储最后一个单词
	}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= cnt[i]; j++)
			maxx[j] = max(maxx[j], (int)a[i][j].size());//寻找最长长度
    //for (int i = 1; i <= 6; i++) cout << maxx[i] << endl;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= cnt[i]; j++)
		{
			int len = a[i][j].size();
			//cout << "r";
			cout << a[i][j];
			if (j != cnt[i])//如果不是最后一个单词则输出空格
				for (int k = 1; k <= maxx[j] - len + 1; k++)//输出长度为第j个单词最长长度-当前单词长度+多的空格
					cout << " ";
		}
		if (i != n) cout << endl;
	}
		
	return 0;
}
2023/2/23 21:24
加载中...