题意
这个题的目的是练习读题,所以请努力理解这个题的题意,这里故意不翻译,it’s good for you~。
思路
操作时需要注意,string对象的结束位置并不是像char数组那样用’\0‘标记的,除非string对象被重做,否则这个对象的size值不会改变,即使你把一个string对象的每个字符全都弄成’\0’,你输出的也不是空串,而是一堆不可见的’\0’。
如果这个题很神秘的WA到死,请检查一下是不是跪在了不可见字符上。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#include <iostream> #include <algorithm> #include <queue> #include <vector> #include <cstdlib> #include <cstdio> #include <string> #include <cstring> #include <ctime> #include <iomanip> #include <cmath> #include <set> #include <stack> #include <cmath> using namespace std; char grid[2001][2001]; int main(){ int fragCnt = 0; while (scanf(" %d",&fragCnt) != EOF){ memset(grid,0,sizeof(grid)); for (int i = 1; i <= fragCnt; i++) { scanf(" %s",grid[i]); } int len = (int)strlen(grid[1]); string target; for (int i = len-1; i >= 0; i--) { for (int j = fragCnt; j >= 1; j--) { target += grid[j][i]; } } for (int i = (int)target.size()-1; i >= 0; i--) { if (target[i] == '_') { target[i] = 0; }else{ break; } } for (int i = 0; i < target.size(); i++) { if (target[i] == 0) { break; }//结尾的char=0也会被输出,string的size在修改末尾字符为0时不会更新 if (target[i] == '\\') { putchar('\n'); }else if(target[i] == '_'){ putchar(' '); }else{ putchar(target[i]); } } printf("\n\n"); } return 0; } |