蠻力法 字串匹配

來源:互聯網
上載者:User

標籤:圖片   ref   namespace   cin   知識   字串匹配演算法   word   開始   語言   

字串匹配是資料庫開發和文文書處理軟體的關鍵。幸運的是所有現代程式設計語言和字串庫函數,協助我們的日常工作。不過理解他們的原理還是比較重要的。

字串演算法主要可以分為幾類。字串匹配就是其中之一。當我們提到字串匹配演算法,最基本的方法就是所謂的蠻力解法,這意味著我們需要檢查每一個文本串中的字元是否和匹配串相匹配。一般來說我們有文本串和一個匹配串(通常匹配串短於文本串)。我們需要做的就是回答這個匹配串是否出現在文本串中。

概述

字串蠻力匹配法的原理非常簡單。我們必須檢查匹配串的第一個字元與文本串的第一個字元是否相匹配,就如片所述。

 
我們通過比較文本串的和匹配串的第一個字元來開始

如果他們不匹配我們移向文本串的第二個字元。現在我們比較匹配串的第一個字元和文本串第二個字元。如果他們不匹配我們繼續向前移動,直到我們遇到一個相匹配的或直到我們到達文本串的最後。

 
因為文本串第一個字元和匹配串的第一個字元不匹配,我們向前移動到文本串的的第二個字元。現在我們比較文本串的第二個字元和匹配串的第一個字元!

假設第一個字元匹配,我們移向匹配串的第二個字元去和文本串的下一個字元比較。如下面圖片所示。

 
如果文本串的一個字元和匹配串的第一個字元相匹配,我們向前移動到匹配串第二個字元和文本串的下一個字元做匹配

如果僅僅是因為匹配串的第一個字元與文本串的某個字元相匹配,那並不意味著這個匹配串出現在文本串中,也僅僅是第一個字元出現在文本串中,其他說明不了。我們必須向前移動匹配串,看看完整的匹配串是否包含在文本文本串中。

 

#include "stdafx.h"
#include<iostream>
#include<vector>
using namespace std;
/*int main()
{
int n;
cin>>n;
vector<char>A(n);
for(int i=0;i<n;i++)
{
cin>>A[i];
}
int m;
cin>>m;
vector<char>B(m);
for(int i=0;i<m;i++)
{
cin>>B[i];
}
int j;
for(int i=0;i<n-m;i++)
{
j=0;
while(j<m&&B[j]==A[i+j])
{
j++;
if(j==m)
{
cout<< i<<endl;
}
cout<< -1<<endl;
}
}
return 0;
}*/
//注:以上是來自課本的實現方法,由於本人自己對這原理雖然有一定理解但實現還是有一定的瑕疵,所以參照了網上的解法
int BruceForceStringmatch(string text,string pattern)
{
//分別得到文本和模式的長度
int n=text.size();
int m=pattern.size();
//開始蠻力字元匹配
for(int i=0;i<n-m;i++)
{
int j=0;
while(j<m&&text[i+j]==pattern[j])
{
j++;
}
if(j==m)
{
return i;
}
}
return -1;

}
int main()
{
string text("hello world!");
string pattern("o wo");
int result=BruceForceStringmatch(text,pattern);
cout<<result<<endl;
return 0;
}
//註:兩種方法的實現的方法都是一模一樣的唯一不同是在於對字串的處理方面。

蠻力法 字串匹配

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.