1. 程式人生 > 實用技巧 >C++不呼叫string實現字串中子串重複次數統計

C++不呼叫string實現字串中子串重複次數統計

提要

C++標準庫中封裝了很好用的string型別,可以輕鬆通過find查詢子串。
這裡給出一種純粹使用char*的子串統計實現

實現

巢狀遍歷母串和子串進行逐個比對,核心是計數器自增的時機

#include<iostream>

int match(const char* main,const char* sub)
{
    int count = 0;
    for(int i=0;main[i]!='\0';i++)
    {
        for(int j=0;sub[j]!='\0';j++)
        {
            if(main[i+j]!=sub[j]){break;}
            if(sub[j+1]=='\0'){count++;}  //core
        }        
    }
    return count;
}

int main(int argc, char const *argv[])
{
    char *main="ABCBCDEEEF";
    char *sub="EE";
    std::cout<<match(main,sub)<<std::endl;
    return 0;
}
//result = 2

附加

另附使用C++標準庫string的簡潔實現

#include<iostream>
#include<string>

int match(const std::string& main,const std::string& sub)
{
    int count = 0;
    int index = 0;
    while((index=main.find(sub,index))<main.length())      
    {
        count++;
        index++;
    }
    return count;
}

int main(int argc, char const *argv[])
{
    std::string main="ABCBCDEEEF";
    std::string sub="EE";
    std::cout<<match(main,sub)<<std::endl;
    return 0;
}