日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

21行代码AC——习题5-1 代码对齐(Alignment of Code, UVa1593)——解题报告

發布時間:2024/2/28 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 21行代码AC——习题5-1 代码对齐(Alignment of Code, UVa1593)——解题报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:

輸入若干行代碼,要求各列單詞的左邊界對齊且盡量靠左,單詞之間至少要空一格,每個單詞不超過80個字符,每行不超過180個字符,一共最多1000行。

思路:

1、輸入內容存入二維數組
2、找出每列最長的單詞做域寬
3、按域寬輸出單詞。

注意點:

這道題本質就是在考get型函數處理輸入+按域寬和左對齊輸出。
1、讀取輸入內容有兩種方法:getline()逐行讀取后用stringstream分割,或getchar()逐個讀取后靠判斷是否為空格分割。個人更傾向第一種。
2、在讀取的同時就要求出每列最長單詞的大小,方便且高效。這種方法叫做在線處理
3、每行末尾無空格,在輸出時判斷一下就OK。
4、求域寬和左對齊采用的是#include<iomanop>頭文件中的setw()函數和setiosflags()函數。


題目(提交)鏈接→UVa-1593


代碼:

#include<bits/stdc++.h> using namespace std; string s, st; vector<string> lines[1010]; //每一行的單詞 int row = 0, maxcol[1010] = {0}; //行號、每列單詞最長值 int main() {while(getline(cin, s)) { //整行輸入 stringstream input(s);while(input >> st) {maxcol[lines[row].size()] = max(maxcol[lines[row].size()],(int)st.size());lines[row].push_back(st);//保存單詞 }row++; //行號 }for(int i = 0; i < row; i++) {for(int j = 0; j < lines[i].size(); j++) //j是否為最后一列,是則直接輸出,否則填充空格左對齊。 j==(lines[i].size()-1) ? cout << lines[i][j] : cout << setw(maxcol[j]+1) << setiosflags(ios::left) << lines[i][j];cout << "\n"; } return 0; }

收獲:

1、鞏固了getline()用法
2、鞏固了在線處理算法,應用更加熟練。


日拱一卒,功不唐捐。

總結

以上是生活随笔為你收集整理的21行代码AC——习题5-1 代码对齐(Alignment of Code, UVa1593)——解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。