跳到主要內容

發表文章

目前顯示的是 2021的文章

[C++] getline 空白的一行

 以下為一個簡單讀檔範例: #include<bits/stdc++.h> using namespace std; int main(int argc, char** argv) { ifstream inputFile("haha"); string line; while(getline(inputFile, line)) { int a = 0; stringstream tkn(line); tkn >> a; cout << " a = " << a << endl; } return 0; } 文字檔 haha 內容: 3 5 6 注意結尾有多一換行。 ----------------------------------------------------- 此情況下,程式執行結果: a = 3 a = 5 a = 6 a = 0 ----------------------------------------------------- getline 在讀檔最後一行,會讀到空的字串。造成多了一筆無效資料。 所以 stringstream 切 token 時,要特別小心,用 if(tkn >> a)  條件判斷 stringstream 是否 fail。

[Linux] sed replace with regex

以下有個例子,說明 sed 如何將檔案中: #include "../bbb/file.h" 這個字串中的 ../bbb 刪除,變成: #include "file.h" 指令如下: sed -i -r 's/(#include.*)\".*\/(.*\.h)\"/\1\"\2\"/g' ./file.cpp 其中 -i 代表作用在輸入檔案。 -r 代表要使用 regex。 如果要對某個資料夾內的所有檔案執行上述 sed 操作: find <folder_path> -type f -exec sed -i -r 's/(#include.*)\".*\/(.*\.h)\"/\1\"\2\"/g' {} \;

[Software] Bazel 於 Linux 安裝(Ubuntu)

 根據官方的作法,最快的方法如下: sudo apt-get install curl gnupg curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg sudo mv bazel.gpg /etc/apt/trusted.gpg.d/ echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list 然後: sudo apt-get update && sudo apt-get install bazel

[Training] GCJ 2021 Qualification Round - Reversort

 第一次參加 GCJ,之前一直沒時間完成這個夢想,這次勇敢踏出第一步。 Qualification Round 已經晉級,我檢討並總結自己的 Code,將比較好的寫法整理下來。 第一題 Reversort 很簡單,沒太大的問題。 題目要求實現 Reversort 演算法,Pseudo Code 已經給予,直接依照 Pseudo Code 刻程式碼即可: Reversort(L):   for i := 1 to length(L) - 1     j := position with the minimum value in L between i and length(L), inclusive     Reverse(L[i..j]) 這裡要注意,矩陣 reverse 有既有的函式可以用,以及 Case 輸出 index 是從 1 開始計,而非 0 開始起算。 以下是我總結較好的寫法: // by EdocZec on 2021/04/03 // Google Code Jam 2021-01 #include <bits/stdc++.h> using namespace std; template<typename T> ostream& operator<<(ostream&os, const vector<T>& v) { for(int i=0; i<v.size(); i++) os << v[i] << " "; return os; } int readi() { int i; cin >> i; return i; } int alg(vector<int>& a) { int score = 0; for(int i=0; i<(a.size()-1); i++) { int min_idx = i; for(int j=i+1; j<(a.size()); j++) { if(a[min_idx] > a[j]) m

[Vim] 我的 .vimrc

我用過的文字編輯器有 sublime text/atom/notepad++/gedit 等等。 後來我在 window 和 Linux 寫程式還是比較慣用 vim。 以下整理我常用的 .vimrc:  set nu "show line number. set rnu "related line number. nmap ; : "replace ';' with ':' in normal mode. set ai "auto indent set mouse=a "activate mouse set expandtab "replace tab with space. set tabstop=4 "replace tab with 4 spaces. set bg=dark "background set to dark. color desert "color scheme. syntax on "enable syntax highlight. " auto complete: inoremap ( ()<Esc>i inoremap ' ''<Esc>i inoremap " ""<Esc>i inoremap [ []<Esc>i inoremap { {}<Esc>i set cursorline " active cursorline 到此 vim 搭配 Ctrl + N 當自動補全,已經很好用了,之後有好用設定會再補上來。

[Tool] cmder + python + MinGW for windows

推薦適用於 windows 的好用 shell terminal 工具 cmder,它能提供類似 Linux 的終端機介面跟指令,且我覺得它比 Windows 10 內建的 Bash 終端好用。 cmder 下載網址: https://cmder.net/ cmder 不需要安裝,下載後直接執行主程式即可。 一般我都在 Linux 環境編程,但如果使用的電腦是 Windows 10,我會用 cmder 建立熟悉的 Linux 終端機環境。 以下提供我常用來編程的初始化設定。 cmder 按 Win+Alt+P,可以啟動設定介面,在這個介面內先設定 bash 預設的 Shell,否則啟動時可能會出現錯誤訊息,因為 cmder 預設 使用 PowerShell,但因簽證問題造成 Windows PowerShell 出現錯誤訊息。 在 Startup 選單: 在 General 選單: 接著微調一些設定: 字體調整到舒適的字型和大小。 可以開啟 Quake 模式。這個模式在程式競賽或是工作時很好用,可以透過 Ctrl+` 這個組合鍵將終端機顯示在最上方,或隱藏終端機成為背景模式。 這個組合鍵是可以修改的,在 Keys & Macro 選單: 下載 MinGW Installer,安裝 MinGW,然後在系統環境變數加入 MinGW 的 bin 資料夾位置。 http://mingw-w64.org/doku.php 安裝 vim,cmder 切換到家目錄 “~,可以在裡面設定 .vimrc 檔案,來調整 vim 設定。 安裝 python,一樣將 python bin 資料夾新增到環境變數。