程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 找出n個字符串中出現次數最多的子串

找出n個字符串中出現次數最多的子串

編輯:C++入門知識

該程序未考慮出錯機制,同時效率比較低。只是算法比較簡單一些,比較容易理解。

#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdlib.h>
#define NUM 10
using namespace std;

/**
該函數找出字符串str中從begin開始到end結束的字符串
並將該字符串返回給result

輸入值:
str    -- 字符串
begin  -- 開始的位置
end    -- 結束的位置

返回值:
result --返回符合要求的字符串
*/
void getSubstr(const char *str, int begin, int end, char *result)
{
char *temp=result;
//cout<<"strlen=="<<strlen(str)<<endl;
//if(end<strlen(str))

for(int i=0;i<strlen(str);i++)
{
if(i>=begin && i<end)
*temp++=*(str+i);
}

*temp='\0';
}

 

/**
輸入值:
*str[]   -- 字符數組
  n      -- 字符數組中元素個數
*substr  -- 要匹配的字符串

返回值:
return值 -- *substr 在字符數組中匹配的次數
*/
int match(char *str[], int n, const char *substr)
{
int num=0;
int lenSubstr=strlen(substr);
char *result = new char[255];
for(int i=0;i<n;i++)//第i個字符串
{
int len_i_str = strlen(str[i]);
for(int j=0;j<len_i_str;j++) //對第i個字符串的操作
{
getSubstr(str[i], j, j+lenSubstr, result);
if(strcmp(result,substr)==0)num++;
}
}
delete [] result;
return num;
}

/**
輸入值:
*str[]   -- 字符數組
   n     -- 字符數組中元素個數
返回值:
result   -- 出現次數最多的字符串
return值 -- 出現次數最多的字符串出現的次數
*/
int getResult(char *str[], int n,  char *result)
{
char *str_sub=new char[255];
for(int m=0;m<255;m++)
*(str_sub+m)='\0';
int num=0,max=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<strlen(str[i]);j++)
{
for(int k=1;k<strlen(str[i]);k++)
{
//if((j+k)<strlen(str[i]))
getSubstr(str[i],j,j+k,str_sub);
if(*str_sub=='\0')continue;


num = match(str, n, str_sub);

//cout<<"strlen=="<<strlen(str[i]);
//cout<<" 第["<<i<<","<<j<<","<<k<<"]個str_sub子串="<<str_sub;
//cout<<" 匹配次數:"<<num<<"次"<<endl;

if(num>=max && strlen(str_sub)>=strlen(result))
{
max=num;
strcpy(result,str_sub);
//cout<<"num="<<num<<",str="<<result<<endl;
}
}
}
}
delete [] str_sub;
return max;
}
int main(int argc, char* argv[])
{
char *str="chenqingtign";
char *result=new char[255];
int num=0;
for(int i=0;i<255;i++)
*(result+i)='\0';

char *str1[NUM]={"cheqing0ting0","cheting0ing0ing0","ing0tteeing0ddss","swering0","sdfvxing0","kjlning0","kjlning0","kjlning0","kjlning0","kjlning0"};
num=getResult(str1,NUM,result);

cout<<"字符串:“"<<result<<"”共出現"<<num<<"次\n"<<endl;

delete [] result;
return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved