우리는 유연하게 사용 할 수 있습니다 \ (C ++ \) 이 문제를 해결하려면 구문을.
이 나타납니다 코드의 구문을 설명합니다 :
- \ (IT \ \ 문자열 :: 반복자 ) (a)의 정의한다는 것을 의미 \ (문자열 \) 반복자 타입 \ IT (\) , \는 (^ * IT는 \) 이 현재의 캐릭터를 나타내는 \ IT (\) 소자.
- \ (^ 최대 * \) _ \ (요소 (TOT의 +. 1 \ TOT + m +. 1)) 이 기능은 길이 반환 \ (m \) 배열 \을 (TOT \) 의 최대 요소 .
그리고 시뮬레이션 몇 가지 기본이 있습니다.
\ (AC \) 코드 :
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cctype>//头文件准备
#define itn int
#define gI gi
using namespace std;
inline int gi()
{
int f = 1, x = 0; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar();}
return f * x;
}//快速读入
int n, m, tot[1005]/*每个文件中最大的列数*/, cnt, sum/*最大的行数*/;
string s, ans[1005]/*每一行的答案*/, tr;
int main()
{
n = gi();
for (itn i = 1; i <= n; i+=1)
{
m = gi(), cin >> s;
memset(tot, 0, sizeof(tot));//记得清空数组
ans[0] = ans[0] + s/*加上表头*/, sum = max(sum, m)/*计算最大的行数*/;
for (int j = 1; j <= m; j+=1)
{
cin >> tr;//输入每行的元素
ans[j] = ans[j] + tr;//先加入答案
for (string :: iterator it = tr.begin(); it != tr.end(); it+=1)//遍历第j行
{
tot[j] = tot[j] + (*it == ',');//计算','分隔符个数
}
}
cnt = *max_element(tot + 1,tot + m + 1);//得出最多的','分隔符数量
for (int j = 0; j < 1005; j+=1)//枚举行。因为我们不知道最终答案的行数,因此就要枚举到最大的行数
{
for (int k = tot[j]; k <= ((i == n) ? (cnt - 1) : (cnt)); k+=1)//为答案增加','分隔符,注意判断i==n的情况,此时就要少加上一个','
{
ans[j] = ans[j] + ',';//加上','分隔符
}
}
}
for (int i = 0; i <= sum; i+=1)
{
cout << ans[i] << endl;//输出答案
}
return 0;
}