2010年8月5日 星期四

[C++ 範例代碼] 在字串中搜尋某個字元, 並將該自元位置回傳

前言 :
在這裡我們要設計一個 API, 透過傳入字串與我們欲搜尋的字元, 再傳入的字串進行搜尋, 最後將搜尋到的字元在該字串的位置回傳. 若不存在則回傳 NULL.
另外提供另一個參數讓使用者決定是搜尋到第一個符合的結果就回傳, 還是搜尋完整個字串在以最後一個Match 的結果回傳. 在這裡我們透過定義一個列舉如下來客製搜尋結果 :
  1. enum TD_SEARCH_TYPE{  
  2.     TD_SEARCH_FWD,  // 搜尋到第一個符合結果即回傳  
  3.     TD_SEARCH_BACK  // 搜尋完整個字串, 以最後一個符合結果回傳  
  4. };  
函式API 定義如下 :
語法 :
char *TD_SearchChar(char *cString, char c, TD_SEARCH_TYPE eType);

輸入參數 :
cString
欲進行搜尋的字串. 將在此字串中找尋我們要的字元.
c
欲搜尋的字元.
eType
搜尋方法, 根據列舉可以有兩種結果, 一是搜尋到第一個結果就會傳, 二是搜尋完整個字串, 以最後一個符合的結果回傳.

輸出結果 :
將符合的結果位置回傳.

範例代碼 :
  1. #include   
  2. #include   
  3. #include   
  4.   
  5. //#define TD_SEARCH_FWD 1  
  6. //#define TD_SEARCH_BACK 2  
  7. enum TD_SEARCH_TYPE{  
  8.     TD_SEARCH_FWD,  
  9.     TD_SEARCH_BACK  
  10. };  
  11.   
  12. char *TD_SearchChar(char *cString, char c, TD_SEARCH_TYPE eType) {  
  13.     int iCharPos=0;  
  14.     int iStrLen = strlen(cString);  
  15.     char *cszBackFoundPos = NULL;  
  16.     switch(eType) {  
  17.         case TD_SEARCH_FWD:  
  18.             while(iCharPos < iStrLen) {  
  19.                 if(cString[iCharPos] == c) return (cString+iCharPos);  
  20.                 iCharPos++;  
  21.             }  
  22.             break;  
  23.         case TD_SEARCH_BACK:              
  24.             while(iCharPos < iStrLen) {  
  25.                 if(cString[iCharPos] == c) cszBackFoundPos = (cString+iCharPos);  
  26.                 iCharPos++;  
  27.             }  
  28.             if(cszBackFoundPos!=NULL) return cszBackFoundPos;  
  29.             break;  
  30.         default:  
  31.             break;  
  32.     }  
  33.     return NULL;  
  34. }  
  35. void main() {  
  36.     char *line = "Hello, John. Long time no see. How about Johnny?";  
  37.     char *fwd_search = TD_SearchChar(line, 'J', TD_SEARCH_FWD);  
  38.     char *bk_search = TD_SearchChar(line, 'J', TD_SEARCH_BACK);  
  39.     printf("Frond Search: %s\n", fwd_search);  
  40.     printf("Back Search: %s\n", bk_search);  
  41. }  
輸出結果 :
Frond Search: John. Long time no see. How about Johnny?
Back Search: Johnny?

補充說明 :
C++ : Reference : C Library : cstring (string.h) : strlen
Get string length
Returns the length of str.
The length of a C string is determined by the terminating null-character: A C string is as long as the amount of characters between the beginning of the string and the terminating null character.
This should not be confused with the size of the array that holds the string. For example:
char mystr[100]="test string";

defines an array of characters with a size of 100 chars, but the C string with which mystr has been initialized has a length of only 11 characters. Therefore, while sizeof(mystr) evaluates to 100, strlen(mystr) returns 11.
This message was edited 3 times. Last update was at 05/08/2010 09:23:48

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...