程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 字串統計,統計字符串中字符個數

字串統計,統計字符串中字符個數

編輯:關於C語言

字串統計,統計字符串中字符個數


 

 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 }

 

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