程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 一步一步寫算法(之字符串查找 上篇)

一步一步寫算法(之字符串查找 上篇)

編輯:關於C

【 聲明:版權所有,歡迎轉載,請勿用於商業用途。  聯系信箱:feixiaoxing @163.com】

 

 

 

 

    字符串運算是我們開發軟件的基本功,其中比較常用的功能有字符串長度的求解、字符串的比較、字符串的拷貝、字符串的upper等等。另外一個經常使用但是卻被我們忽視的功能就是字符串的查找。word裡面有字符串查找、notepad裡面有字符串查找、winxp裡面也有系統自帶的字符串的查找,所以編寫屬於自己的字符串查找一方面可以提高自己的自信心,另外一方面在某些情況下可以提高軟件的運行效率。下面我們就三個方面討論一下字符串的查找方法:

 

    1)基本字符串查找

 

    2)KMP查找

 

    3)多核cpu下的字符串查找

 

   

 

    (一)、首先介紹一下普通的字符串查找方法:

 

    a)指針是否為空,否則返回

 

    b)判斷str是否為‘\0’,判斷剩下來的字符串長度是否>=模板字符串的長度,只有一個不符合,函數結束運行

 

    c)依次比較字符串和模板字符串的內容,如果全部符合,返回;只要一個不符合,break跳出,str加1,轉b)

 

    那麼算法應該怎麼寫呢?朋友們可以自己先書寫一下,即使在紙上寫也可以。

 

 

char* strstr(const char* str, char* data) 

    int index; 

    int len; 

 

    if(NULL == str || NULL == str) 

        return NULL; 

 

    len = strlen(data); 

    while(*str && (int)strlen(str) >= len){ 

        for(index = 0; index < len; index ++){ 

            if(str[index] != data[index]) 

                break; 

        } 

 

        if(index == len) 

            return (char*) str; 

 

        str++; 

    } 

 

    return NULL; 

char* strstr(const char* str, char* data)

{

       int index;

       int len;

 

       if(NULL == str || NULL == str)

              return NULL;

 

       len = strlen(data);

       while(*str && (int)strlen(str) >= len){

              for(index = 0; index < len; index ++){

                     if(str[index] != data[index])

                            break;

              }

 

              if(index == len)

                     return (char*) str;

 

              str++;

       }

 

       return NULL;

}

    為了說明代碼的正確性,我們可以編寫幾個測試用例測試一下。

 

 

void test() 

    assert(NULL == strstr(NULL, "china")); 

    assert(NULL == strstr("hello, world", "china")); 

    assert(NULL != strstr("hello, china", "china")); 

void test()

{

       assert(NULL == strstr(NULL, "china"));

       assert(NULL == strstr("hello, world", "china"));

       assert(NULL != strstr("hello, china", "china"));

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved