2014年4月3日 星期四

C/C++ 字串分析函式

========== 檔案相關 ==========
開啟檔案
FILE * fopen ( const char * filename, const char * mode );
fopen - C++ Reference
C 語言標準函數庫分類導覽 - stdio.h fopen()

關閉檔案
int fclose ( FILE * stream );
fclose - C++ Reference
C 語言標準函數庫分類導覽 - stdio.h fclose()

讀取資料
char * fgets ( char * str, int num, FILE * stream );
stdio.h 中的 fgets() 從檔案一行一行的讀取資料,共需三個參數,第一個參數為儲存輸入資料的陣列,第二個參數為該行最多幾個字元,第三個參數為指向結構 FILE 的指標。
fgets - C++ Reference
C 語言標準函數庫分類導覽 - stdio.h fgets()

========== 字串相關 ==========
搜尋函式:
const char * strchr ( const char * str, int character );
string.h 的函數 strchr() ,需要一個字串及一個字元當作參數,然後搜尋字元在字串中第一次出現的位置,回傳該位置的指標。
strchr - C++ Reference
C 語言標準函數庫分類導覽 - string.h strchr()

const char * strstr ( const char * str1, const char * str2 );
Parameters 1 是輸入字串,Parameters 2 是找尋字串,strstr 會先將頭一次比對成功的 pointer 回傳,也就是如果要找尋 appleboyappleboy 字串中的 boy,函式會回傳第一次比對成功的 boy pointer,而並非回傳最後一個比對到的。
strstr - C++ Reference
[C/C++] cstring (string.h) 搜尋函式:strstr, strchr


size_t strspn ( const char * str1, const char * str2 );
這有兩個解釋
1. 由字串開始,str1哪一個位置開始不包含str2裡面的字元,若第一個字元就不包含在str2裡面,當然就是回傳0(0 base)
2. strspn()會傳回兩個字串開始不匹配的第一個字元索引位置,否則傳回0
我覺得應該是1的這一個解釋比較正確,若有空可以來做一個實驗。
strspn - C++ Reference
C 語言標準函數庫分類導覽 - string.h strspn()
strspn()—返回从字符串开头连续包含特定字符的字符数目

切割函式
char * strtok ( char * str, const char * delimiters );
string.h 的函數 strtok() ,需要兩個字串參數,以第二個參數字串的內容切割第一個參數字串。
strtok - C++ Reference
C 語言標準函數庫分類導覽 - string.h strtok()
[C&C++] strtok
若一開始字串為
char buffer[] = "a string,of ,,tokens";
char *token = NULL;
char *line = NULL;
char *final = NULL;
原本記憶體內容為
a string,of ,,tokens
當執行完一次
token = strtok (buffer, " ,");
則記憶體內容為
a'\0'string,of ,,tokens
因此,若列印token的話,結果為a

再執行一次
line = strtok (NULL, " ,")
則記憶體內容為
a'\0'string'\0'of ,,tokens
因此,若列印line的話,結果為string

若這個時候,執行
final = strtok (NULL, "");
則記憶體內容不變,但,
列印final的話,結果為of ,,tokens

複製函數
char * strcpy ( char * destination, const char * source );
string.h 的函數strcpy() ,需要兩個字串當作參數,然後把第二個參數的字串複製到第一個參數的字串中,然後回傳第一個參數。
strcpy - C++ Reference
C 語言標準函數庫分類導覽 - string.h strcpy()

長度計算
size_t strlen ( const char * str );
strlen - C++ Reference
C 語言標準函數庫分類導覽 - string.h strlen()

字串比對
int strcmp (const char * str1, const char * str2 );
string.h 的函數strcmp() ,需要兩個字串當作參數,比較兩個字串是否相等,相等就回傳0,第一個字串大於第二個字串回傳正值,反之回傳負值。
strcmp - C++ Reference
C 語言標準函數庫分類導覽 - string.h strcmp()

int strcasecmp (const char * str1, const char * str2 ); // 非標準函式
strcasecmp()—判断字符串是否相等(忽略大小写)

判斷字元
int isspace (int c );
判斷此字元是否為空白
For the "C" locale, white-space characters are any of:

' ' (0x20) space (SPC)
'\t' (0x09) horizontal tab (TAB)
'\n' (0x0a) newline (LF)
'\v' (0x0b) vertical tab (VT)
'\f' (0x0c) feed (FF)
'\r' (0x0d) carriage return (CR)

isspace - C++ Reference
C 語言標準函數庫分類導覽 - ctype.h isspace()

int isalpha (int c );
Check if character is alphabetic (function )

int isdigit (int c );
Check if character is decimal digit (function )

2014年4月2日 星期三

vim - 複製

想要把第5行到第10行的內容貼到第12行之後,
要使用下面的指令
:5,10 co 12

參考資料:
[保留] 请问如何用vi 复制第5行到第10行并粘贴到第12行之后?

2014年4月1日 星期二

xshell軟體

之前遠端連到linux server都是使用putty或pietty(中文支援比較好)

最近又開始在玩linux了,
發現xshell這個新東西實在非常好用。

其中最好用的就是tab視窗,
尤其是我們常常一次就連很多個連線的人非常的需要。

參考資料如下: [網路工具] Xshell 4 超好用的 SSH 連線工具 - 強力推薦 xshell & xftp

2014年3月27日 星期四

strtok

這一篇文章寫的還蠻清楚的。

記錄一下~~

[C&C++] strtok

2014年3月20日 星期四

dump hex

在debug的時候,
有時候有一連串的資料需要看,
這個時候若一個變數一個變數處理,
會變的非常麻煩,
現在需要用到dump hex的指令,
而這個東西應該已經一堆人寫好了,
為了不要浪費時間,
直接去網路上找就可以了。

triple-column hex dump with ASCII representation

非常之好,
直接套用上去就可以啦~~

static in C code

這裡看到一個for static的解釋,
看起來還蠻清楚的,記錄一下。

Keyword Static (Function) [C++ 求生筆記]

不過,在C++中,static好像有特別的功能,
就是不需要宣告物件,
就可以直接透過類別來使用其static的函式。

設定TortoiseSVN比對時使用Beyond compare

在使用TortoiseSVN來看程式碼的差異時,
TortoiseSVN有內建的TortoiseMerge,
但因為實在太過陽春了,
還是建議使用外部程式來看檔案差異。

如下設定:


這裡要注意的是,若目前已經有存在的Beyond Compare的視窗,則會在這個視窗加一個tab顯示。

若不想要在目前已有的視窗顯示的話,
則加入/solo指令即可。
圖上圖中,灰階的部分。