PAT(甲级)2019年冬季考试 7-1 Good in C (20分)

tech2022-12-01  103

```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; }

 

最新回复(0)