Pages

2011年2月16日 星期三

我的Shell Script學習心得(二):cut的使用

以下記錄我練習寫的一個小程式,可以讀取出file1第1行記錄的日期資訊。
#This code was written by Uncle on 2011/02/15
#This code can Add a new line on file1, and Update Date information
#in the first line.
#!bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

tmp=`head -1 file1|cut -c 17-24`
echo $tmp
----------------------------------------
其中file1內容:
>Last Update on 20110215
Data1 by Peter
Data2 by Mary

執行結果:
$sh test3.sh
20110215

2011年2月15日 星期二

克服

這篇也是記錄我學習程式的一點點心得。

學習時,可能會自己製造阻礙,然後故意讓自己被絆倒。

然後就不敢學習了,因為還沒克服真正的阻礙前,已經被自己製造的阻礙絆倒。

我覺得不能如此,希望自己每天能進步。

有關Blogger張貼程式碼

剛剛發現在Blogger上發表文章張貼程式碼時,<、>這兩個符號沒有辦法顯示出來。

有一個網站能解決這個問題:

http://www.opinionatedgeek.com/DotNet/Tools/HTMLEncode/Encode.aspx


將所有包含程式碼的文章貼到這個網站提供的方塊中,可以做html的encode,並且在Blogger發表新文章時點選"修改HTML",並將轉碼後的html text貼到"修改HTML"那個頁面。

如此就可以正常顯示<、>等符號了。

2011年2月14日 星期一

[C++] template

因為演算法作業我想使用class template,因此複習一下,並寫下心得:

1. Function template,同樣的function,不同型態的參數。


先在程式開頭(using namespace std;那一行下面)打上template <class T>

然後在描述函式內容的時候:

template <class T>

void fun(T a)

{

...

}


如此在main中要使用這個function,可以用很多型態的a當函式的參數,而且完全不用特別說明現在使用什麼資料型態當成fun的參數,直接拿起來就用。程式會自己判斷。


2. 如果定義一個class,class裏面member的資料型態可以自由換,例如一下子用int一下子用別的型態,可用class template,我記錄以下幾點筆記:


(1)在class的定義之前寫下:template <class T>

(2)class裏面就可以開始用T當成資料型態。

(3)要開始描述class的member function行為前,要寫兩行,一行是template <class T>,另一行是 T class名稱<T>::member函式名稱。(函式回傳值不一定要是T)


例如:

// This is an example code written by Uncle on 2011/02/14.

// This code shows how to use class template.

template <class T>

class Uclass

{

public:

void UncleSayHi();

T num;

};


template <class T>

void Uclass<T>::UncleSayHi()

{

cout << "hi!" << endl;

}

...


4. <>括號裡可以寫很多種class,例如可以寫template <class T,class X>。也可以加上已知型態的參數,例如寫template <class T, double d>,如此在class的定義裏面只要看到d就是代表一個double型態的值。


5. 使用class時,宣告方式:class名稱 <需要的資料型態> 變數名;

例如:Uclass <int> variable1;

2011年2月13日 星期日

我的Shell Script學習心得(一):檔案的操作

以下是我學習Shell Script過程中,整理下來的心得。

我常用的Linux指令符號:

1. "|"符號用法:
(第一個指令)|(第二個指令):代表第一個指令結果導到第二個指令的input。

2. ">"用法:
(1)>(2):代表(1)存到(2)。

3. ">>"用法:
(1)>>(2):代表(1)append到(2)。
---------------------------------------------------------------------------------------------------------------------------------
以下是我寫的一個能將檔案更新一行資料的程式:

#!bin/bash
#test1.sh
#This code was written by Uncle on 2011/02/14
#This code can update a new line into file named "test_file" in current directory.

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH


echo $1>>./test_file
echo "Update successful."

#end
---------------------------------------------------------------------------------------------------------------
以下是執行方式。
在終端機輸入指令:
$ sh test1.sh Uncle
執行結果:
Update successful.

在終端機輸入指令:
$ cat test_file
執行結果:
.....file舊的資料顯示在此...
Uncle --->多了一筆資料更新叫作"Uncle"。
---------------------------------------------------------------------------------------------------------------

2011年2月9日 星期三

我的pthread學習心得(一)

我是用g++練習寫thread的。
我簡單將我學到的東西列舉出來:

1. 使用到pthread,標頭檔要加入pthread.h檔案。

2. 先用pthread_create_init函式將參數傳入thread程序,然後再用pthread_join函式等待thread執行終止。如果thread之間有要access到同樣的資料,可以用pthread_mutex_lock函式將mutex變數鎖住,並且用pthread_mutex_unlock函式解鎖,如此可以控制thread運行順序。

3. 用g++編譯時,指令要輸入:g++ lpthread main.cpp,其中main.cpp是要編譯的檔案。如此能設定搜尋標頭檔的目錄。

[C++] 的標頭檔寫法

本篇記錄C++標頭檔寫法:(之前我有點搞混標頭檔寫法,但研究之後發現超簡單)

1. include<標頭檔名稱> //用大於跟小於符號"<>"包起標頭檔名,
//編譯器就會去預設存放標頭檔的目錄找標頭檔。

2. include "標頭檔名稱" //用引號包住標頭檔名,編譯器先去當前程式碼存放的目錄找標頭檔,
//若找不到再去原來預設的目錄找。

C++撰寫code時,有的標頭檔沒有副檔名".h",沒有副檔名的標頭檔只能在std命名空間內使用。這就是為什麼我剛開始學C++程式時,都會在開頭撰寫using namespace std; 來指定命名空間。

2011年2月8日 星期二

[C++] string和cstring

以下記錄我常用的cstring跟string用法。

C型態的string:
C型態的string將文字存在陣列裏面。用指標可access字串陣列。

我常用的C型態字串用法:
1. char *s = "I am Uncle."; //s指標指向字串開頭,即'I'的位址。
2. char s[] = "I am Uncle."; //此時s陣列儲存整個字串,陣列最後有存'\0'。
3. size_t len = strlen(s); //可得len為s陣列存的字串長度,長度計算時不計算'\0'字元。

C++中有定義string類別,以下列出我常用的string用法:

1. string a; //直接宣告a字串時,不用設初始值a即為空字串。
2. string有一個建構式是string(size_t n, char c),十分好用。
例如宣告string a(2,c); //代表將c裡儲存的字元,連續2次當成a的初始值。

3. string類別可以直接跟char相加,例如:
string a = "12";
char b = '3';
a += b;
cout << "a;
執行結果會輸出"123"。

4. a.clear(); //清空string內容的寫法,其中a是string類別。

5. int len = a.length() //得到len為a字串裡儲存的字數(不包括null character),
//其中a為string類別。

6. a = a.assign(word,0,5) //將word從第0個位置開始拿出5個字元當成a內儲存的所有內容。
//a跟word都是string類別。