在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)分析&挖掘/ 字符串查找 上篇
hash表
單詞統(tǒng)計
鏈表排序
查找
可變參數(shù)
爬樓梯
內(nèi)存
prim算法 中
線性結(jié)構的處理
數(shù)據(jù)選擇
prim算法 上
循環(huán)單向鏈表
基數(shù)排序
堆排序
鏈表重合
排序二叉樹的保存和加載
圖添加和刪除
排序二叉樹線索化
非遞歸排序
字符串查找 下篇
鏈表逆轉(zhuǎn)
函數(shù)堆棧顯示
遞歸和堆棧
二叉樹深度遍歷
線性隊列
循環(huán)和遞歸
快速排序
尋找丟失的數(shù)
A*算法
克魯斯卡爾算法 下
排序二叉樹
大數(shù)計算
二叉樹廣度遍歷
prim算法 下
洗牌算法
圖結(jié)構
最大公約數(shù)、最小公倍數(shù)
圖創(chuàng)建
雙向鏈表
字符串查找 上篇
尋路
通用算法的編寫
哈夫曼樹 下
線性堆棧
八皇后
排序二叉樹刪除-1
挑選最大的n個數(shù)
字符串查找 中篇
哈夫曼樹 上
合并排序
回數(shù)
選擇排序
哈希二叉樹
通用數(shù)據(jù)結(jié)構
“數(shù)星星”
單向鏈表
排序二叉樹插入
圖的保存
排序二叉樹刪除-2
排序二叉樹刪除-3
n!中末尾零的個數(shù)統(tǒng)計

字符串查找 上篇

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

1)基本字符串查找

2)KMP查找

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

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

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

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

c)依次比較字符串和模板字符串的內(nèi)容,如果全部符合,返回;只要一個不符合,break跳出,str加1,轉(zhuǎn)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;  
}  

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

void test()  
{  
    assert(NULL == strstr(NULL, "china"));  
    assert(NULL == strstr("hello, world", "china"));  
    assert(NULL != strstr("hello, china", "china"));  
}