c實現的字串尋找函數

來源:互聯網
上載者:User

1. c++貌似有這樣的方法,我用c代碼實現了一遍,沒有實現演算法最佳化。可以解決基本的字串尋找需求。

/*** 返回 buf找到的與expr完全符合的第一項的第一個字元的索引   * zgr 2013-05-23   * buf-源字串   * offset-源字串位移-從位移量往後搜尋   * expr-匹配字串   * bufMaxLen-源字串長度   */int findFirst(const char* buf, int offset, const char* expr, int bufMaxLen){if(buf == NULL || offset<0 || offset>bufMaxLen-1){return -1;}const char* p1;const char* p2;p1 = buf+offset;p2 = expr;int curoffset = offset;int sameTimes = 0;int exprOffSet = -1;while(curoffset<bufMaxLen){if(*p1==*p2 && sameTimes==0){exprOffSet = curoffset;p1++;p2++;curoffset++;sameTimes++;}else if(*p1==*p2 && sameTimes<strlen(expr)){p1++;p2++;curoffset++;sameTimes++;if(sameTimes==strlen(expr)){return exprOffSet;}}else{if(exprOffSet>=0){p1 = buf+exprOffSet+1;p2 = expr;curoffset = exprOffSet+1;sameTimes = 0;exprOffSet = -1;}else{p1++;curoffset++;}}}return -1;}

這個是從後往前尋找

/*** 返回 buf找到的與expr完全符合的最後一項的第一個字元的索引   * zgr 2013-05-23   * buf-源字串   * expr-匹配字串   * bufMaxLen-源字串長度   */int findLast(const char* buf, const char* expr, int bufMaxLen){if(buf==NULL || bufMaxLen<0 || expr==NULL){return -1;}const char* p1;const char* p2;p1 = buf+bufMaxLen-1;p2 = expr+strlen(expr)-1;int curoffset = bufMaxLen-1;int sameTimes = 0;int exprOffSet = -1;while(curoffset>=0){if(*p1==*p2 && sameTimes==0){exprOffSet = curoffset;p1--;p2--;curoffset--;sameTimes++;}else if(*p1==*p2 && sameTimes<strlen(expr)){sameTimes++;if(sameTimes==strlen(expr)){return exprOffSet-(strlen(expr)-1);}p1--;p2--;curoffset--;}else{if(exprOffSet>=0){p1 = buf+(exprOffSet-1);p2 = expr+strlen(expr)-1;curoffset = exprOffSet-1;sameTimes = 0;exprOffSet = -1;}else{p1--;curoffset--;}}}return -1;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.