题目:已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde的个数,如果没有返回0,有的话返回子字符串的个数。
答:
#include "stdafx.h" #include <iostream> using namespace std; //获取next数组的值 void GetNext(const char* pattern, int length, int *next) { int i = 0; next[i] = -1; int j = -1; while (i < length - 1) { if (-1 == j || pattern[i] == pattern[j]) { i++; j++; if (pattern[i] != pattern[j]) { next[i] = j; } else { next[i] = next[j]; } } else { j = next[j]; } } } //返回子字符串的个数 int CountSubstringNumber(const char *src, int slength, const char * pattern, int plength, int *next) { int i = 0; int j = 0; int count = 0; while (i < slength && j < plength) { if (-1 == j || src[i] == pattern[j]) { i++; j++; } else { j = next[j]; } if (j >= plength) { count++; j = 0; } } return count; } int _tmain(int argc, _TCHAR* argv[]) { char src[] = "asderwsde"; char pattern[] = "sde"; int slength =strlen(src); int plength = strlen(pattern); int *next = new int[plength]; GetNext(pattern, plength, next); int pos = CountSubstringNumber(src, slength, pattern, plength, next); cout<<"主串"<<src<<"含有子串"<<pattern<<"的个数为:"<<pos<<endl; cout<<endl; return 0; }
运行界面如下: