这道练习题训练了:

1.结构体数组

2.二分查找

3.指针操作

----

都不难。但非常基础,我认为非常好,做完了记到博客上来,题目见k&R,实现例如以下:

  1. /*
  2. * Practice of struct array. K&R 6-1
  3. * @author : wusuopubupt
  4. * @date : 2014-09-18
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <ctype.h>
  9. #include <string.h>
  10.  
  11. #define MAXWORD 100
  12.  
  13. typedef struct key_{
  14. char *word;
  15. int count;
  16. } key;
  17.  
  18. key key_tab[] = {
  19. {"auto", 0},
  20. {"break", 0},
  21. {"case", 0},
  22. {"char", 0},
  23. {"const", 0},
  24. {"continue", 0},
  25. {"default", 0},
  26. {"for", 0},
  27. {"int", 0},
  28. {"void", 0},
  29. {"while", 0}
  30. };
  31.  
  32. int getword(char *word, int n);
  33. int binary_search(key key_tab[], char *word, int n);
  34. key *binary_search2(key *key_tab, char *word, int n);
  35.  
  36. int getword(char *word, int n) {
  37. int c;
  38. char *w = word;
  39.  
  40. while(isspace(c = getchar())) {
  41. ;
  42. }
  43. if(c != EOF) {
  44. *w++ = c;
  45. }
  46. if(!isalpha(c)) {
  47. *w = '\0';
  48. return c;
  49. }
  50. while(n > 0) {
  51. c = getchar();
  52. if(isalnum(c)) {
  53. *w++ = c;
  54. }
  55. else {
  56. break;
  57. }
  58. n--;
  59. }
  60.  
  61. *w = '\0';
  62. return w[0];
  63. }
  64.  
  65. int binary_search(key key_tab[], char *word, int n) {
  66. int low = 0;
  67. int high = n-1;
  68. int mid;
  69. int result;
  70. while(low <= high) {
  71. mid = (low+high) / 2;
  72. result = strcmp(word, key_tab[mid].word);
  73. if(result < 0) {
  74. high = mid-1;
  75. }
  76. else if(result > 0) {
  77. low = mid + 1;
  78. }
  79. else {
  80. return mid;
  81. }
  82. }
  83. return -1;
  84. }
  85.  
  86. /* implemented with pointer */
  87. key *binary_search2(key *key_tab, char *word, int n) {
  88. key *low = key_tab;
  89. key *high = key_tab + n-1;
  90. key *mid;
  91. int result;
  92. while(low <= high) {
  93. //mid = (low+high) / 2; /* error: can not use pointer+pointer d*/
  94. mid = low + (high-low) / 2; /* pointer + num */
  95. result = strcmp(word, mid->word);
  96. if(result < 0) {
  97. high = mid-1;
  98. }
  99. else if(result > 0) {
  100. low = mid + 1;
  101. }
  102. else {
  103. return mid;
  104. }
  105. }
  106. return NULL;
  107. }
  108.  
  109. int main1() {
  110. int i;
  111. int n_keys = sizeof(key_tab) / sizeof(key_tab[0]);
  112. char word[MAXWORD];
  113.  
  114. while(getword(word, MAXWORD) != EOF) {
  115. if(isalpha(word[0])) {
  116. if((i = binary_search(key_tab, word, n_keys)) >= 0) {
  117. key_tab[i].count++;
  118. }
  119. }
  120. }
  121.  
  122. i = 0;
  123. while(i < n_keys) {
  124. printf("%s : %d\n", key_tab[i].word, key_tab[i].count);
  125. i++;
  126. }
  127.  
  128. return 0;
  129. }
  130.  
  131. int main() {
  132. int n_keys = sizeof(key_tab) / sizeof(key_tab[0]);
  133. char word[MAXWORD];
  134. key *k = NULL;
  135.  
  136. while(getword(word, MAXWORD) != EOF) {
  137. if(isalpha(word[0])) {
  138. if((k = binary_search2(key_tab, word, n_keys)) != NULL) {
  139. k->count++;
  140. }
  141. }
  142. }
  143.  
  144. int i = 0;
  145. while(i < n_keys) {
  146. printf("%s : %d\n", key_tab[i].word, key_tab[i].count);
  147. i++;
  148. }
  149.  
  150. return 0;
  151. }

github:https://github.com/wusuopubupt/LearningC/blob/master/K%26R/chp6/keyword_count.c

K&amp;R练习题6-1统计关键词出现的次数的更多相关文章

  1. eval(function(p,a,c,k,e,r)解密程序

    以eval(function(p,a,c,k,e,r){e=function(c)开头的js文件是经过加密的 使用下面方法可以对js文件进行加密.解密 步骤:1.新建html页面,内容如下列代码 2. ...

  2. sort +awk+uniq 统计文件中出现次数最多的前10个单词

    实例cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1nr|head -100 统计文件中出现次数最多的前10个单 ...

  3. collections.Counter类统计列表元素出现次数

    # 使用collections.Counter类统计列表元素出现次数 from collections import Counter names = ["Stanley", &qu ...

  4. Excel中COUNTIFS函数统计词频个数出现次数

    Excel中COUNTIFS函数统计词频个数出现次数   在Excel中经常需要实现如下需求:在某一列单元格中有不同的词语,有些词语相同,有的不同(如图1所示).需要统计Excel表格中每个词语出现的 ...

  5. 学习笔记_过滤器应用_1(分ip统计网站的访问次数)

    分ip统计网站的访问次数 ip count 192.168.1.111 2 192.168.1.112 59 统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做 ...

  6. 【C语言】统计数组中出现次数超过一半的数字

    //统计数组中出现次数超过一半的数字 #include <stdio.h> int Find(int *arr, int len) { int num = 0; //当前数字 int ti ...

  7. R语言︱数据分组统计函数族——apply族用法与心得

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:apply族功能强大,实用,可以代替 ...

  8. 在hadoop上进行编写mapreduce程序,统计关键词在text出现次数

    mapreduce的处理过程分为2个阶段,map阶段,和reduce阶段.在要求统计指定文件里的全部单词的出现次数时. map阶段把每一个关键词写到一行上以逗号进行分隔.并初始化数量为1(同样的单词h ...

  9. 2019牛客国庆集训派对day1 K题 双向链表练习题 splay区间翻转

    题目链接: 解法: 先建n颗平衡树,合并的时候将a中最右的结点翻转到根节点,b中最左的结点翻转到根节点,对合并后的根节点进行标记. #include <bits/stdc++.h> usi ...

随机推荐

  1. C指针陷阱

    问题一: #include <stdio.h> int main(int argc, char *argv[]) { ]={ ,,,, }; ); printf(),*(p-)); ; } ...

  2. Ownership qualifiers of Objective-C: In Details

    虽然这里讲的大部分知识以前都看过,但是时不时出现某些点让我如茅塞顿开: 以前经常会忘记一些细节,这篇文章可以更好的理解细节,巩固知识体系. Ownership qualifiers In Object ...

  3. werkzeug中reloader的实现

    在用flask开发时,如果把use_reloader设为True(debug设为True也能实现),那当你修改了app代码或调用环境发生改变时,服务器会自动重启,如下 * Detected chang ...

  4. Python网络编程——设定并获取默认的套接字超时时间

    Sometimes,you need to manipulate the default values of certain properties of a socket library, for e ...

  5. 2013 南京邀请赛 K题 yet another end of the world

    /** 大意:给定一组x[],y[],z[] 确定有没有两个不同的x[i], x[j] 看是否存在一个ID使得 y[i]<=ID%x[i]<=z[i] y[j]<=ID%x[j]&l ...

  6. System.Web Namespce

    System.Web概述: System.Web是.NET中web应用开发的一个基础类库,定义浏览器与服务器之间的所有操作方法,包括请求输入流(HttpRequest).输出流(HttpRespons ...

  7. javascript 检测密码强度

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 轻松搞定Linux端口转发

    一 从一台机到另一台机端口转发 启用网卡转发功能 #echo 1 > /proc/sys/net/ipv4/ip_forward 举例:从192.168.0.132:21521(新端口)访问19 ...

  9. Sqoop处理Clob与Blob字段

    [Author]: kwu Sqoop处理Clob与Blob字段,在Oracle中Clob为大文本.Blob存储二进制文件. 遇到这类字段导入hive或者hdfs须要特殊处理. 1.oracle中的測 ...

  10. 一个轻client,多语言支持,去中心化,自己主动负载,可扩展的实时数据写服务的实现方案讨论

    背景 背景是设计一个实时数据接入的模块,负责接收client的实时数据写入(如日志流,点击流),数据支持直接下沉到HBase上(兴许提供HBase上的查询),或先持久化到Kafka里.方便兴许进行一些 ...