歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言統計源文件關鍵字的個數

C語言統計源文件關鍵字的個數

日期:2017/3/1 10:08:05   编辑:Linux編程

C語言統計源文件關鍵字的個數

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define MAX_WORD 128;
  4. #define MAX_LEN 100
  5. typedef struct _Key{
  6. char* keyWord;
  7. int cout;
  8. }KeyWord;
  9. //初始化
  10. KeyWord keyTab[]={
  11. "auto",0,
  12. "break",0,
  13. "case",0,
  14. "char",0,
  15. "const",0,
  16. "continue",0,
  17. "default",0,
  18. "define",0,
  19. "unsigned",0,
  20. "void",0,
  21. "volatile",0,
  22. "while",0
  23. };
  24. //獲取長度
  25. size_t getLen(void)
  26. {
  27. return (sizeof keyTab /sizeof keyTab[0]);
  28. }
  29. //打印
  30. void printKey(KeyWord key[],size_t len)
  31. {
  32. int i;
  33. for(i=0;i<len;i++)
  34. {
  35. printf("%4d %s\n",key[i].cout,key[i].keyWord);
  36. }
  37. }
  38. //從文件中獲取一個單詞
  39. int getWord(char* word,int len,FILE* f){
  40. char* w = word;
  41. int c;
  42. //跳過空格
  43. while(isspace(c=fgetc(f)))
  44. ;
  45. if(c!=EOF)
  46. *w++ = c;
  47. //不是字母
  48. if(!isalpha(c))
  49. {
  50. *w='\0';
  51. return c;
  52. }
  53. for(;--len>0;w++)
  54. {
  55. if(!isalnum(*w=fgetc(f)))
  56. {
  57. ungetc(*w,f);
  58. break;
  59. }
  60. }
  61. *w = '\0';
  62. return c;
  63. }
  64. //二分查找
  65. int binSearch(KeyWord k[], char* word,int len)
  66. {
  67. int low,high,mid,pos;
  68. low=0;
  69. high=len-1;
  70. while(low<=high)
  71. {
  72. mid = (high+low)/2;
  73. //如果word比key[mid].keyword小 下次循環在[low~mid-1]之間找
  74. if((pos=strcmp(word,k[mid].keyWord))<0)
  75. {
  76. high = mid-1;
  77. }else if(pos>0){
  78. low = mid+1;
  79. }else{
  80. return mid;
  81. }
  82. }
  83. return -1;
  84. }
  85. //FindKeyW.h
  86. //main.c
  87. #include <stdio.h>
  88. #include <stdlib.h>
  89. #include <string.h>
  90. #include "FindKeyW.h"
  91. int main(int argc, char *argv[])
  92. {
  93. extern KeyWord keyTab[];
  94. size_t len = getLen();
  95. FILE* f;
  96. if(f=fopen("FindKeyW.h","r"))
  97. {
  98. char word[MAX_LEN];
  99. int pos;
  100. while(getWord(word,MAX_LEN,f)!=EOF)
  101. {
  102. if(isalpha(word[0]))
  103. {
  104. if((pos=binSearch(keyTab,word,len))>0)
  105. {
  106. keyTab[pos].cout++;
  107. }
  108. }
  109. }
  110. fclose(f);
  111. }
  112. printKey(keyTab,len);
  113. system("PAUSE");
  114. return 0;
  115. }
Copyright © Linux教程網 All Rights Reserved