C語言統(tǒng)計(jì)子字符串出現(xiàn)次數(shù) C語言課程設(shè)計(jì)題目計(jì)算字符串中子串出現(xiàn)的次數(shù)?
C語言課程設(shè)計(jì)題目計(jì)算字符串中子串出現(xiàn)的次數(shù)?//什么是菜單界面?包括(&L)。H>///計(jì)算子字符串int strcount(char*STR,char*sfind)的父字符串中的子字符串?dāng)?shù){[
C語言課程設(shè)計(jì)題目計(jì)算字符串中子串出現(xiàn)的次數(shù)?
//什么是菜單界面?包括(&L)。H>///計(jì)算子字符串int strcount(char*STR,char*sfind)的父字符串中的子字符串?dāng)?shù){[t]include<stdio。H>/////計(jì)算父字符串int strcount(char*STR,char*STR,char*sfind){#&include<stddio中的子字符串?dāng)?shù)。H<<<;包括<stddio。H>///////計(jì)算父字符串中的子字符串?dāng)?shù)int strcount(int str(char*str,str,char,char*sfin(char*str,char*str,char*sfind){[int count(int,str,str,str,str,str,char*str,char*str,char*sfind){(int,int,int,int,int,int,int,int count){(int count)count(int count(“0”T/T count}T return count}int main(){T char a[1000]T char b[1000]T scanf(%s%s”,a,b)T printf(%dn”,strcount(a,b))T return 0}
如果要找出位置,建議使用KMP算法,時(shí)間復(fù)雜度是O(幾十億個(gè)字符串的總長(zhǎng)度,一個(gè)子字符串的長(zhǎng)度)。但主要的問題是“包含某個(gè)子串的所有字符串”。然后可以有許多這樣的字符串,您必須輸出字符串而不是僅僅輸出位置,因此復(fù)雜性將更大。在最壞的情況下,“數(shù)十億個(gè)字符串”中的每一個(gè)都是200A,“子字符串”是A。在找出所有位置后,必須輸出1353400*數(shù)十億個(gè)字符。
2. 如何找出同時(shí)包含多個(gè)子字符串的所有字符串?
建議使用交流自動(dòng)機(jī)。如果你問“如何同時(shí)找出數(shù)十億個(gè)字符串中的一個(gè)子串的位置”,那么AC自動(dòng)機(jī)的時(shí)間復(fù)雜度是O(幾個(gè)子串的總長(zhǎng)度*字符集大?。┗騉(幾個(gè)子串的總長(zhǎng)度*字符集大?。5饕膯栴}是“如何找出同時(shí)包含多個(gè)子字符串的所有字符串”。找到匹配的位置后,我們必須用兩個(gè)指針掃描。在掃描過程中,我們堅(jiān)持每個(gè)“幾個(gè)子串”中的一個(gè)匹配幾次,以找出所有符合條件的字符串。但產(chǎn)量仍然是最昂貴的。
如何解決問題?
由于答案輸出的復(fù)雜性瓶頸,其他部分只是做你想做的事情。
統(tǒng)計(jì)字符串中子串出現(xiàn)的次數(shù)(不分大小寫?
#include<stdio.h>#include<string.h> int find(char*str1,char*str2){int i,j int str1len=strlen(str1),str2len=strlen(str2)int count=0 for(i=0i<str1len-str2len 1i){for(j=0j<str2lenj){if(str2[j]!=str1[i j])break}if(j==str2len)Count}return Count}int main(){char a[200],B[200],*g int c=0 printf(“please input main string:”)get(a)printf(“please input substring:”)get(B)c=find(a,B)printf(“出現(xiàn)次數(shù):Dn”,c) 返回0}
Microsoft文檔中心--包含