```scanf```无法读取空格,需要用```getline```读取空格 ```char```数组得开得大一点,这种字符串的题就应该用```string```做,不可能判断超时 最后的错误:```测试点4 运行时错误```(PAT给出的可能情况是:数组访问越界,) 数组越界,把每个数组开到```10000```即可(```测试点3:3分```)
#include <bits/stdc++.h>
using namespace std;
char line[30][10][8];///数组得开的大一点才可以
//char lines[10][8];
char out[10010];
char res[10010][1010];///输出
string tmpout;
int main(){
for(int k=0;k<26;k++)///26个英文字母
for(int i=1;i<=7;i++){
scanf("%c%c%c%c%c",&line[k][i][0],&line[k][i][1],&line[k][i][2],&line[k][i][3],&line[k][i][4]);
//scanf("%s",line[k][i]);
// scanf("%s",lines[i]);
getchar();
}
//cout<<endl;
//printf("=================================\n");
//for(int k=0;k<26;k++)///26个英文字母
// for(int i=1;i<=7;i++)
// printf("%s\n",line[k][i]);
// printf("%s\n",lines[i]);
//scanf("%s",out);
getline(cin,tmpout);///测试点1,2有空格
strcpy(out,tmpout.c_str());
int curi=0,len=strlen(out);
int currow=0;//总行数
//memset(res,0,sizeof(res));
while(curi<len){
while(!isupper(out[curi])) curi++;
int newi=curi+1;///单词的最后一个下标
while(newi<len&&isupper(out[newi])) newi++;///newi=5
///newi~curi 记录每个大行要打印多少列
for(int row=1;row<=7;row++){///一共7行
int lienum=0;
for(int i=curi;i<newi;i++){///一行的字母,0~4
for(int j=0;j<5;j++)///一行5个标志
res[currow][lienum++]=line[out[i]-'A'][row][j];
if(i!=newi-1)///不是单词的最后一个,就输出单词间的空格
res[currow][lienum++]=' ';
//printf("%s ",line[out[i]-'A'][row]);
}
res[currow][lienum++]='\n';
res[currow][lienum]='\0';
//printf("%d行:%s",currow,res[currow]);
currow++;///行数加1
}
curi=newi;
while(!isupper(out[curi])) ///只处理英文大写字母
curi++;
if(curi<len&&curi!=newi){ ///输出单词结束,再输出单独一行换行
//printf("\n");
res[currow][0]='\n';
res[currow][1]='\0';
currow++;
//printf("%d行:%s",currow-1,res[currow-1]);
}
}
for(int i=0;i<currow;i++){
//printf("%s\n",res[i]);
printf("%s",res[i]);
}
//printf("===========================\n\n");
// }
return 0;
}