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 )

沒有留言: