Alignment of Code
阿新 • • 發佈:2021-07-08
Problem
題意:輸入若干行程式碼,要求各列單詞的左邊界對齊且儘量靠左。
一道很基礎的字串處理題目,我們可以用才學的 string 進行處理。
Solution
一整行的讀入可以採用 getline 讀入。
然後以空格為分界將每個單詞放入二維陣列中。這樣可以便於求得每列單詞的最大長度,短的單詞用空格補齊,以達到每列對齊。
Code
#include <string> #include <cstdio> #include <iostream> using namespace std; const int Maxn = 1000; const int Maxm = 180; string str, word; string a[Maxn + 5][Maxm + 5]; int len[Maxn + 5], siz[Maxm + 5]; int Max (int a, int b) { return a > b ? a : b; } int main () { int n = 0; while (getline (cin, str)) { n ++; for (int i = 0; i < (int) str.size (); i ++) { if (str[i] != ' ') word.push_back (str[i]); else { if ((int) word.size ()) { a[n][++ len[n]] = word; // cout << endl << n << ',' << len[n] << word << endl; word.clear (); } } } if ((int) word.size ()) { a[n][++ len[n]] = word; word.clear (); } } for (int i = 1; i <= n; i ++) { for (int j = 1; j <= len[i]; j ++) { siz[j] = Max (siz[j], (int) a[i][j].length () + 1); } } for (int i = 1; i <= n; i ++) { for (int j = 1; j <= len[i]; j ++) { cout << a[i][j]; if (j == len[i]) continue; for (int k = (int) a[i][j].length () + 1; k <= siz[j]; k ++) printf (" "); } printf ("\n"); } return 0; }