![]()
1 #include<stdio.h>
2 #include<string.h>
3
4 //定义子串参数结构体
5 struct sub_str
6 {
7 char sstr[61]; //子串
8 int len; //子串长度
9 int times; //子串出现的次数
10 };
11
12 int main()
13 {
14 int i,j,k;
15 int l,l_temp; //l:用于记录输入的要统计的子串的最小长度;l_temp:用于记录遍历子串时的临时动态子串长度
16 char str[61],sstr_temp[61]; //str:用于指向输入的要统计的字符串;sstr_temp:用于指向当前统计的子串
17 int str_len; //用于记录输入的要统计的字符串的长度
18 struct sub_str substr[1830]; //substr[1830]:用于记录各个子串的参数,最多有1+2+3+···+60个子串
19 struct sub_str substr_temp; //substr_temp:用于对substr[1830]中的子串进行排序时交换顺序的临时中间结构体变量
20 int sstr_num=0; //用于统计存入substr[1830]中的实际子串数量
21 int max_times; //用于记录子串出现的最大次数
22
23 //输入
24 scanf("%d",&l); //输入统计的子串的最小长度
25 getchar(); //除去输入时的回车键
26 gets(str); //输入要统计的字符串
27
28 str_len=strlen(str); //得到输入的要统计的字符串的长度
29
30 //初始临时动态子串长度为最大长度,遍历要统计的字符串中满足长度的子串
31 for(l_temp=str_len;l_temp>=l;l_temp--)
32 {
33 for(i=0;i<str_len-l_temp;i++) //长度为l_temp的子串在长度为str_len的字符串中有str_len-l_temp个
34 {
35 for(j=i,k=0;j<i+l_temp;j++,k++) //得到当前要统计的子串
36 sstr_temp[k]=str[j];
37
38 for(k=0;k<sstr_num;k++) //查询 substr[1830] 中是否存在当前要统计的子串
39 if(strcmp(sstr_temp,substr[k].sstr)==0) //有,则使该子串的出现次数加1
40 {
41 substr[k].times++;
42 break;
43 }
44
45 if(k==sstr_num) //没有,则在 substr[1830] 中新增该子串,并初始化各个参数
46 {
47 strcpy(substr[sstr_num].sstr,sstr_temp);
48 substr[sstr_num].len=l_temp;
49 substr[sstr_num].times=1;
50 sstr_num++; // substr[1830] 中实际的子串数量加1
51 }
52
53 memset(sstr_temp,0,sizeof(sstr_temp)); //清 0 sstr_temp[61],继续遍历该长度的子串
54 }
55 }
56
57 //采用冒泡排序法对 substr[1830] 中的子串根据出现次数进行排序
58 for(i=0;i<sstr_num-1;i++)
59 {
60 for(j=i;j<sstr_num;j++)
61 {
62 if(substr[j].times>substr[i].times)
63 {
64 for(k=0;k<61;k++)
65 substr_temp.sstr[k]=substr[i].sstr[k];
66 substr_temp.len=substr[i].len;
67 substr_temp.times=substr[i].times;
68
69 for(k=0;k<61;k++)
70 substr[i].sstr[k]=substr[j].sstr[k];
71 substr[i].len=substr[j].len;
72 substr[i].times=substr[j].times;
73
74 for(k=0;k<61;k++)
75 substr[j].sstr[k]=substr_temp.sstr[k];
76 substr[j].len=substr_temp.len;
77 substr[j].times=substr_temp.times;
78 }
79 }
80 }
81
82 //输出
83 puts(substr[0].sstr);
84
85 return 0;
86 }